{"openapi":"3.1.0","info":{"title":"Gatewayz Universal Inference API","description":"Gateway for AI model access powered by Gatewayz","version":"2.0.3"},"paths":{"/v1/chat/completions":{"post":{"tags":["chat"],"summary":"Chat Completions","operationId":"chat_completions_v1_chat_completions_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Chat session ID to save messages to","title":"Session Id"},"description":"Chat session ID to save messages to"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProxyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/status/detailed":{"get":{"tags":["monitoring"],"summary":"Get Detailed Status","description":"Get detailed internal system status.\nRequires an admin or valid API key.","operationId":"get_detailed_status_v1_status_detailed_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Detailed Status V1 Status Detailed Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/images/generations":{"post":{"tags":["images"],"summary":"Generate Images","description":"OpenAI-compatible image generation endpoint.\n\nGenerate images from text prompts using various AI models.\nSupports providers like Stability AI (Stable Diffusion), OpenAI (DALL-E), and Google Vertex AI.\n\nExample requests:\n\nDeepInfra:\n```json\n{\n    \"prompt\": \"A serene mountain landscape at sunset\",\n    \"model\": \"stabilityai/sd3.5\",\n    \"size\": \"1024x1024\",\n    \"n\": 1,\n    \"provider\": \"deepinfra\"\n}\n```\n\nDeepInfra/Others:\n```json\n{\n    \"prompt\": \"A serene mountain landscape at sunset\",\n    \"model\": \"stable-diffusion-3.5-large\",\n    \"size\": \"1024x1024\",\n    \"n\": 1,\n    \"quality\": \"standard\"\n}\n```\n\nGoogle Vertex AI:\n```json\n{\n    \"prompt\": \"A serene mountain landscape at sunset\",\n    \"model\": \"stable-diffusion-1.5\",\n    \"size\": \"512x512\",\n    \"n\": 1,\n    \"provider\": \"google-vertex\",\n    \"google_project_id\": \"gatewayz-468519\",\n    \"google_location\": \"us-central1\",\n    \"google_endpoint_id\": \"6072619212881264640\"\n}\n```\n\nFal.ai:\n```json\n{\n    \"prompt\": \"A serene mountain landscape at sunset\",\n    \"model\": \"fal-ai/stable-diffusion-v15\",\n    \"size\": \"1024x1024\",\n    \"n\": 1,\n    \"provider\": \"fal\"\n}\n```","operationId":"generate_images_v1_images_generations_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageGenerationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageGenerationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/audio/transcriptions":{"post":{"tags":["audio"],"summary":"Create Transcription","description":"Transcribe audio using OpenAI Whisper or compatible services.\n\nThis endpoint accepts audio files and returns transcribed text. It supports\nvarious audio formats and provides options for improving transcription quality:\n\n- **language**: Specify the language to improve accuracy (recommended)\n- **prompt**: Provide context or domain-specific vocabulary\n- **temperature**: Control randomness (0 = deterministic, 1 = creative)\n\n## Billing\n\nAudio transcription is billed per minute of audio at model-specific rates.\nCredits are deducted after successful transcription.\n\n## Audio Optimization Tips\n\nFor best results:\n1. Use 16kHz sample rate (Whisper's training rate)\n2. Mono audio is sufficient\n3. Apply noise reduction before upload\n4. Keep segments under 30 seconds for real-time use cases\n5. Provide language hint when known\n\n## Supported Formats\n\nflac, m4a, mp3, mp4, mpeg, mpga, ogg, wav, webm","operationId":"create_transcription_v1_audio_transcriptions_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_create_transcription_v1_audio_transcriptions_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/audio/transcriptions/base64":{"post":{"tags":["audio"],"summary":"Create Transcription Base64","description":"Transcribe base64-encoded audio.\n\nThis endpoint is useful for browser-based applications that capture\naudio as base64 data URLs. It accepts the raw base64 string (without\nthe data URL prefix).\n\n## Billing\n\nAudio transcription is billed per minute of audio at model-specific rates.\nCredits are deducted after successful transcription.\n\n## Example\n\nIf you have a data URL like:\n`data:audio/webm;base64,GkXfo59ChoEBQv...`\n\nExtract just the base64 part after the comma:\n`GkXfo59ChoEBQv...`","operationId":"create_transcription_base64_v1_audio_transcriptions_base64_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_create_transcription_base64_v1_audio_transcriptions_base64_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tools":{"get":{"tags":["tools"],"summary":"List Tools","description":"List all available tools with their definitions.\n\nThis is a public endpoint for tool discovery.\n\nReturns:\n    Dict with tools list and count","operationId":"list_tools_v1_tools_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/tools/definitions":{"get":{"tags":["tools"],"summary":"Get Definitions","description":"Get tool definitions formatted for chat completion requests.\n\nThis endpoint returns tool definitions in the format expected by\nOpenAI-compatible chat completion APIs. Public for integration purposes.\n\nReturns:\n    List of tool definitions","operationId":"get_definitions_v1_tools_definitions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/tools/{tool_name}":{"get":{"tags":["tools"],"summary":"Get Tool Info","description":"Get information about a specific tool.\n\nArgs:\n    tool_name: Name of the tool\n\nReturns:\n    Tool definition and metadata\n\nRaises:\n    404: If tool not found","operationId":"get_tool_info_v1_tools__tool_name__get","parameters":[{"name":"tool_name","in":"path","required":true,"schema":{"type":"string","title":"Tool Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tools/execute":{"post":{"tags":["tools"],"summary":"Execute Tool Endpoint","description":"Execute a tool with given parameters.\n\nThis endpoint allows direct tool execution outside of the chat flow.\nRequires authentication via API key.\n\nArgs:\n    request: Tool name and parameters\n    api_key: User's API key (injected via dependency)\n\nReturns:\n    Tool execution result\n\nRaises:\n    401: If not authenticated\n    404: If tool not found\n    500: If execution fails unexpectedly","operationId":"execute_tool_endpoint_v1_tools_execute_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolExecuteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolExecuteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tools/search/augment":{"post":{"tags":["tools"],"summary":"Search Augment","description":"Perform web search and return formatted context for prompt augmentation.\n\nThis endpoint is designed for models that don't support native tool calling.\nIt executes a web search and returns formatted text that can be prepended\nto the user's message to provide real-time context.\n\nThe formatted context includes:\n- An AI-generated answer summary (if available)\n- Individual search results with titles, snippets, and URLs\n\nArgs:\n    request: Search query and options\n    api_key: Optional API key (allows both authenticated and guest usage)\n\nReturns:\n    SearchAugmentResponse with formatted context string\n\nExample response context:\n    [Web Search Results]\n    Summary: Bitcoin is currently trading at $45,000...\n\n    Sources:\n    1. CoinDesk - Bitcoin Price Today\n       Bitcoin rose 2% in early trading...\n       https://coindesk.com/...\n    ...","operationId":"search_augment_v1_tools_search_augment_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchAugmentRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchAugmentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/routers":{"get":{"tags":["routers"],"summary":"Get Intelligent Routers","description":"Get available intelligent routers with configurations.\n\nThis endpoint provides documentation for router:* model strings,\nenabling frontend auto-discovery of intelligent routing capabilities.\n\nReturns router information including:\n- id: Unique router identifier\n- name: Display name for UI\n- description: Router purpose and capabilities\n- modes: Available optimization modes\n- syntax: Primary and alias syntax patterns\n- use_cases: Recommended use cases","operationId":"get_intelligent_routers_v1_routers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/gateways":{"get":{"tags":["gateways"],"summary":"Get Gateways","description":"Get all available gateway providers with their display configuration.\n\nThis endpoint enables frontend auto-discovery of gateways, eliminating\nthe need to manually update the frontend when new gateways are added.\n\nReturns a list of gateway configurations including:\n- id: Unique gateway identifier\n- name: Display name for UI\n- color: Tailwind CSS color class for badges\n- priority: 'fast' or 'slow' for loading order\n- site_url: Gateway's website URL\n- logo_url: Auto-generated favicon URL\n- aliases: Alternative IDs that map to this gateway","operationId":"get_gateways_v1_gateways_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/gateways/status":{"get":{"tags":["gateways"],"summary":"Get Gateways Status","description":"Get diagnostic status for all gateways including error states and model counts.\n\nThis endpoint helps diagnose why gateways may be returning 0 models by showing:\n- Current error state (if in circuit breaker)\n- Cached model count\n- Cache age\n- Last error message (if any)","operationId":"get_gateways_status_v1_gateways_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/provider":{"get":{"tags":["providers"],"summary":"Get Providers","description":"Get all available provider list with detailed metric data including model count and logo URLs","operationId":"get_providers_v1_provider_get","parameters":[{"name":"moderated_only","in":"query","required":false,"schema":{"type":"boolean","description":"Filter for moderated providers only","default":false,"title":"Moderated Only"},"description":"Filter for moderated providers only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Limit number of results","default":100,"title":"Limit"},"description":"Limit number of results"},{"name":"offset","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Offset for pagination","default":0,"title":"Offset"},"description":"Offset for pagination"},{"name":"gateway","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Gateway to use (e.g., 'openrouter', 'groq'), or 'all' for all gateways","default":"all","title":"Gateway"},"description":"Gateway to use (e.g., 'openrouter', 'groq'), or 'all' for all gateways"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/provider/{provider_name}/stats":{"get":{"tags":["statistics"],"summary":"Get Provider Statistics","description":"Get comprehensive statistics for a specific provider\n\nThis endpoint provides usage statistics for a provider across all or a specific gateway.\n**This fixes the \"Total Tokens: 0\" and \"Top Model: N/A\" issues in your UI!**\n\nArgs:\n    provider_name: Provider name (e.g., 'openai', 'anthropic', 'meta-llama')\n    gateway: Optional gateway filter\n    time_range: Time range for statistics\n\nReturns:\n    Provider statistics including:\n    - Total requests and tokens\n    - Total cost and averages\n    - Top model used\n    - Model breakdown\n    - Speed metrics\n\nExample:\n    GET /catalog/provider/openai/stats?time_range=24h\n    GET /catalog/provider/anthropic/stats?gateway=openrouter&time_range=7d","operationId":"get_provider_statistics_v1_provider__provider_name__stats_get","parameters":[{"name":"provider_name","in":"path","required":true,"schema":{"type":"string","title":"Provider Name"}},{"name":"gateway","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by specific gateway","title":"Gateway"},"description":"Filter by specific gateway"},{"name":"time_range","in":"query","required":false,"schema":{"type":"string","description":"Time range: '1h', '24h', '7d', '30d', 'all'","default":"24h","title":"Time Range"},"description":"Time range: '1h', '24h', '7d', '30d', 'all'"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/gateway/{gateway}/stats":{"get":{"tags":["statistics"],"summary":"Get Gateway Statistics","description":"Get comprehensive statistics for a specific gateway\n\nThis endpoint provides usage statistics for a gateway (e.g., openrouter, groq, deepinfra).\n**This fixes the \"Top Provider: N/A\" issue in your UI!**\n\nArgs:\n    gateway: Gateway name ('openrouter', 'featherless', 'deepinfra', 'chutes', 'groq', 'google-vertex', etc.)\n    time_range: Time range for statistics\n\nReturns:\n    Gateway statistics including:\n    - Total requests, tokens, and cost\n    - Unique users, models, and providers\n    - Top provider used through this gateway\n    - Provider breakdown\n    - Performance metrics\n\nExample:\n    GET /catalog/gateway/openrouter/stats?time_range=24h\n    GET /catalog/gateway/deepinfra/stats?time_range=7d","operationId":"get_gateway_statistics_v1_gateway__gateway__stats_get","parameters":[{"name":"gateway","in":"path","required":true,"schema":{"type":"string","title":"Gateway"}},{"name":"time_range","in":"query","required":false,"schema":{"type":"string","description":"Time range: '1h', '24h', '7d', '30d', 'all'","default":"24h","title":"Time Range"},"description":"Time range: '1h', '24h', '7d', '30d', 'all'"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/gateways/summary":{"get":{"tags":["statistics"],"summary":"Get All Gateways Summary Endpoint","description":"Get summary statistics for all gateways\n\nThis endpoint provides a comprehensive overview of usage across all gateways.\n**Perfect for dashboard overview showing all providers!**\n\nArgs:\n    time_range: Time range for statistics\n\nReturns:\n    Dictionary with statistics for each gateway and overall totals\n\nExample:\n    GET /catalog/gateways/summary?time_range=24h","operationId":"get_all_gateways_summary_endpoint_v1_gateways_summary_get","parameters":[{"name":"time_range","in":"query","required":false,"schema":{"type":"string","description":"Time range: '1h', '24h', '7d', '30d', 'all'","default":"24h","title":"Time Range"},"description":"Time range: '1h', '24h', '7d', '30d', 'all'"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/provider/{provider_name}/top-models":{"get":{"tags":["statistics"],"summary":"Get Provider Top Models Endpoint","description":"Get top models for a specific provider\n\nThis endpoint returns the most used models from a provider.\n\nArgs:\n    provider_name: Provider name (e.g., 'openai', 'anthropic')\n    limit: Number of models to return\n    offset: Number of results to skip for pagination\n    time_range: Time range for statistics\n\nReturns:\n    List of top models with usage statistics\n\nExample:\n    GET /catalog/provider/openai/top-models?limit=5&time_range=7d\n    GET /catalog/provider/openai/top-models?limit=5&offset=5&time_range=7d","operationId":"get_provider_top_models_endpoint_v1_provider__provider_name__top_models_get","parameters":[{"name":"provider_name","in":"path","required":true,"schema":{"type":"string","title":"Provider Name"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"description":"Number of models to return","default":5,"title":"Limit"},"description":"Number of models to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of results to skip","default":0,"title":"Offset"},"description":"Number of results to skip"},{"name":"time_range","in":"query","required":false,"schema":{"type":"string","description":"Time range: '1h', '24h', '7d', '30d', 'all'","default":"24h","title":"Time Range"},"description":"Time range: '1h', '24h', '7d', '30d', 'all'"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/models":{"get":{"tags":["models"],"summary":"Get All Models","operationId":"get_all_models_v1_models_get","parameters":[{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter models by provider","title":"Provider"},"description":"Filter models by provider"},{"name":"is_private","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by private models: true=private only, false=non-private only, null=all models","title":"Is Private"},"description":"Filter by private models: true=private only, false=non-private only, null=all models"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Limit number of results (default: 100, max: 1000)","default":100,"title":"Limit"},"description":"Limit number of results (default: 100, max: 1000)"},{"name":"offset","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Offset for pagination","default":0,"title":"Offset"},"description":"Offset for pagination"},{"name":"include_huggingface","in":"query","required":false,"schema":{"type":"boolean","description":"Include Hugging Face metrics for models that have hugging_face_id (slower, default: false)","default":false,"title":"Include Huggingface"},"description":"Include Hugging Face metrics for models that have hugging_face_id (slower, default: false)"},{"name":"gateway","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Gateway to use (e.g., 'openrouter', 'groq'), or 'all' for all gateways","default":"all","title":"Gateway"},"description":"Gateway to use (e.g., 'openrouter', 'groq'), or 'all' for all gateways"},{"name":"unique_models","in":"query","required":false,"schema":{"type":"boolean","description":"Return deduplicated models with provider arrays. Only applies when gateway='all'. Default: False (flat catalog). When true, each model appears once with an array of providers offering it. Example response: {id: 'gpt-4', providers: [{slug: 'openrouter', pricing: {...}}, ...]}","default":false,"title":"Unique Models"},"description":"Return deduplicated models with provider arrays. Only applies when gateway='all'. Default: False (flat catalog). When true, each model appears once with an array of providers offering it. Example response: {id: 'gpt-4', providers: [{slug: 'openrouter', pricing: {...}}, ...]}"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/models/by-category/{category}":{"get":{"tags":["models"],"summary":"Get Models By Category Api","description":"List models carrying a derived category tag.\n\nCategories are auto-assigned from provider/model data\n(cheapest, fastest, largest, smartest, reasoning, vision, free, coding,\nlong-context, balanced, flagship, mid, budget) — see\nsrc/services/model_categorizer.py. This is the DB-backed candidate filter\nthe router uses to narrow model choice.","operationId":"get_models_by_category_api_v1_models_by_category__category__get","parameters":[{"name":"category","in":"path","required":true,"schema":{"type":"string","title":"Category"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Limit number of results","default":200,"title":"Limit"},"description":"Limit number of results"},{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","description":"Include inactive/deprecated models (admin/debug)","default":false,"title":"Include Inactive"},"description":"Include inactive/deprecated models (admin/debug)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/models/trending":{"get":{"tags":["statistics"],"summary":"Get Trending Models Api","operationId":"get_trending_models_api_v1_models_trending_get","parameters":[{"name":"gateway","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Gateway filter or 'all'","default":"all","title":"Gateway"},"description":"Gateway filter or 'all'"},{"name":"time_range","in":"query","required":false,"schema":{"type":"string","description":"Time range: '1h', '24h', '7d', '30d'","default":"24h","title":"Time Range"},"description":"Time range: '1h', '24h', '7d', '30d'"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of models to return","default":10,"title":"Limit"},"description":"Number of models to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of results to skip","default":0,"title":"Offset"},"description":"Number of results to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort by: 'requests', 'tokens', 'users'","default":"requests","title":"Sort By"},"description":"Sort by: 'requests', 'tokens', 'users'"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/models/low-latency":{"get":{"tags":["models"],"summary":"Get Low Latency Models Api","description":"Get models optimized for low latency.\n\nReturns models with sub-500ms average response times based on production metrics.\nUseful for real-time applications, chatbots, and latency-sensitive use cases.\n\n**Ultra-low-latency models** (<100ms):\n- groq/moonshotai/kimi-k2-instruct-0905 (29ms)\n- groq/openai/gpt-oss-120b (74ms)\n\n**Low-latency models** (<500ms):\n- Groq models (fastest provider)\n- Select OpenRouter models (gemini-flash, gemma, etc.)\n- Fireworks optimized models","operationId":"get_low_latency_models_api_v1_models_low_latency_get","parameters":[{"name":"include_ultra_only","in":"query","required":false,"schema":{"type":"boolean","description":"Only include ultra-low-latency models (<100ms response time)","default":false,"title":"Include Ultra Only"},"description":"Only include ultra-low-latency models (<100ms response time)"},{"name":"include_alternatives","in":"query","required":false,"schema":{"type":"boolean","description":"Include suggested fast alternatives for common model families","default":true,"title":"Include Alternatives"},"description":"Include suggested fast alternatives for common model families"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Limit number of results","default":50,"title":"Limit"},"description":"Limit number of results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of results to skip","default":0,"title":"Offset"},"description":"Number of results to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/models/unique":{"get":{"tags":["models"],"summary":"Get Unique Models With Providers","description":"Get unique models with their provider information.\n\nThis endpoint shows deduplicated models (e.g., \"GPT-4\" appears once) with:\n- How many providers offer each model\n- Which providers offer it\n- Pricing from each provider\n- Health status and performance metrics per provider\n- Cheapest and fastest provider for each model\n\n**Use Cases:**\n- Find models available from multiple providers\n- Compare pricing across providers for the same model\n- Identify the cheapest provider for a specific model\n- See which providers offer the most models\n\n**Examples:**\n- Most widely available models: `?sort_by=provider_count&order=desc`\n- Models with 3+ providers: `?min_providers=3&sort_by=provider_count`\n- Cheapest unique models: `?sort_by=cheapest_price&order=asc`\n- Alphabetical list: `?sort_by=name&order=asc`\n\n**Response Format:**\n```json\n{\n  \"models\": [\n    {\n      \"id\": \"gpt-4\",\n      \"name\": \"GPT-4\",\n      \"provider_count\": 3,\n      \"providers\": [\n        {\n          \"slug\": \"openrouter\",\n          \"name\": \"OpenRouter\",\n          \"pricing\": {\"prompt\": \"0.03\", \"completion\": \"0.06\"},\n          \"context_length\": 8192,\n          \"health_status\": \"healthy\",\n          \"average_response_time_ms\": 1200\n        },\n        {\n          \"slug\": \"groq\",\n          \"name\": \"Groq\",\n          \"pricing\": {\"prompt\": \"0.025\", \"completion\": \"0.05\"},\n          \"context_length\": 8192,\n          \"health_status\": \"healthy\",\n          \"average_response_time_ms\": 950\n        }\n      ],\n      \"cheapest_provider\": \"groq\",\n      \"fastest_provider\": \"groq\",\n      \"cheapest_prompt_price\": 0.025,\n      \"fastest_response_time\": 950\n    }\n  ],\n  \"total\": 234,\n  \"limit\": 100,\n  \"offset\": 0\n}\n```","operationId":"get_unique_models_with_providers_v1_models_unique_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":1000,"minimum":1},{"type":"null"}],"description":"Limit number of results (default: 100, max: 1000)","default":100,"title":"Limit"},"description":"Limit number of results (default: 100, max: 1000)"},{"name":"offset","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"Offset for pagination","default":0,"title":"Offset"},"description":"Offset for pagination"},{"name":"min_providers","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"description":"Minimum number of providers (e.g., 2 for models with multiple providers)","title":"Min Providers"},"description":"Minimum number of providers (e.g., 2 for models with multiple providers)"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort by: 'provider_count' (most providers), 'name' (alphabetical), 'cheapest_price' (lowest price)","default":"provider_count","title":"Sort By"},"description":"Sort by: 'provider_count' (most providers), 'name' (alphabetical), 'cheapest_price' (lowest price)"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: 'asc' or 'desc'","default":"desc","title":"Order"},"description":"Sort order: 'asc' or 'desc'"},{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","description":"Include inactive models","default":false,"title":"Include Inactive"},"description":"Include inactive models"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/models/batch-compare":{"post":{"tags":["comparison"],"summary":"Batch Compare Models Api","operationId":"batch_compare_models_api_v1_models_batch_compare_post","parameters":[{"name":"model_ids","in":"query","required":true,"schema":{"type":"array","items":{"type":"string"},"description":"List of model IDs (e.g., ['openai/gpt-4', 'anthropic/claude-3'])","title":"Model Ids"},"description":"List of model IDs (e.g., ['openai/gpt-4', 'anthropic/claude-3'])"},{"name":"criteria","in":"query","required":false,"schema":{"type":"string","description":"Comparison criteria: 'price', 'context', 'availability'","default":"price","title":"Criteria"},"description":"Comparison criteria: 'price', 'context', 'availability'"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/models/{provider_name}/{model_name}/compare":{"get":{"tags":["comparison"],"summary":"Compare Model Gateways Api","operationId":"compare_model_gateways_api_v1_models__provider_name___model_name__compare_get","parameters":[{"name":"provider_name","in":"path","required":true,"schema":{"type":"string","title":"Provider Name"}},{"name":"model_name","in":"path","required":true,"schema":{"type":"string","title":"Model Name"}},{"name":"gateways","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated gateways or 'all'","default":"all","title":"Gateways"},"description":"Comma-separated gateways or 'all'"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/models/{provider_name}/{model_name}":{"get":{"tags":["models"],"summary":"Get Specific Model Api Legacy","description":"Legacy endpoint without /v1/ prefix for backward compatibility","operationId":"get_specific_model_api_legacy_v1_models__provider_name___model_name__get","parameters":[{"name":"provider_name","in":"path","required":true,"schema":{"type":"string","title":"Provider Name"}},{"name":"model_name","in":"path","required":true,"schema":{"type":"string","title":"Model Name"}},{"name":"include_huggingface","in":"query","required":false,"schema":{"type":"boolean","description":"Include Hugging Face metrics if available","default":true,"title":"Include Huggingface"},"description":"Include Hugging Face metrics if available"},{"name":"gateway","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Gateway to use (e.g., 'openrouter', 'groq'), or auto-detect if not specified","title":"Gateway"},"description":"Gateway to use (e.g., 'openrouter', 'groq'), or auto-detect if not specified"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/models/{developer_name}":{"get":{"tags":["models"],"summary":"Get Developer Models Api","operationId":"get_developer_models_api_v1_models__developer_name__get","parameters":[{"name":"developer_name","in":"path","required":true,"schema":{"type":"string","title":"Developer Name"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Limit number of results","default":100,"title":"Limit"},"description":"Limit number of results"},{"name":"offset","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Offset for pagination","default":0,"title":"Offset"},"description":"Offset for pagination"},{"name":"include_huggingface","in":"query","required":false,"schema":{"type":"boolean","description":"Include Hugging Face metrics","default":true,"title":"Include Huggingface"},"description":"Include Hugging Face metrics"},{"name":"gateway","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Gateway: 'openrouter' or 'all'","default":"all","title":"Gateway"},"description":"Gateway: 'openrouter' or 'all'"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/models/search":{"get":{"tags":["models"],"summary":"Search Models","description":"Advanced model search with multiple filters.\n\nThis endpoint allows you to search and filter models across all gateways\nwith powerful query capabilities.\n\n**Examples:**\n- Search for cheap models: `?max_price=0.0001&sort_by=price`\n- Find models with large context: `?min_context=100000&sort_by=context&order=desc`\n- Search by name: `?q=gpt-4&gateway=openrouter`\n- Filter by modality: `?modality=image&sort_by=popularity`\n- Filter for private models only: `?is_private=true`\n- Exclude private models: `?is_private=false`\n\n**Returns:**\n- List of models matching the criteria\n- Total count of matching models\n- Applied filters","operationId":"search_models_v1_models_search_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search query (searches in model name, provider, description)","title":"Q"},"description":"Search query (searches in model name, provider, description)"},{"name":"modality","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by modality: text, image, audio, video, multimodal","title":"Modality"},"description":"Filter by modality: text, image, audio, video, multimodal"},{"name":"is_private","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by private models: true=private only, false=non-private only, null=all models","title":"Is Private"},"description":"Filter by private models: true=private only, false=non-private only, null=all models"},{"name":"min_context","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum context window size (tokens)","title":"Min Context"},"description":"Minimum context window size (tokens)"},{"name":"max_context","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum context window size (tokens)","title":"Max Context"},"description":"Maximum context window size (tokens)"},{"name":"min_price","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum price per token (USD)","title":"Min Price"},"description":"Minimum price per token (USD)"},{"name":"max_price","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum price per token (USD)","title":"Max Price"},"description":"Maximum price per token (USD)"},{"name":"gateway","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Gateway filter: openrouter, featherless, deepinfra, chutes, groq, fireworks, together, google-vertex, or all","default":"all","title":"Gateway"},"description":"Gateway filter: openrouter, featherless, deepinfra, chutes, groq, fireworks, together, google-vertex, or all"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort by: price, context, popularity, name","default":"price","title":"Sort By"},"description":"Sort by: price, context, popularity, name"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of results","default":20,"title":"Limit"},"description":"Number of results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination offset","default":0,"title":"Offset"},"description":"Pagination offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/modelz/models":{"get":{"summary":"Get Modelz Models","description":"Get models that exist on Modelz with optional graduation filter.\n\nThis endpoint bridges Gatewayz with Modelz by fetching model token data\nfrom the Modelz API and applying the same filters as the original Modelz API.\n\nQuery Parameters:\n- is_graduated: Filter for graduated models\n  - true: Only graduated/singularity models\n  - false: Only non-graduated models\n  - null: All models (default)\n\nReturns:\n- List of models with their token data from Modelz\n- Includes model IDs, graduation status, and other metadata","operationId":"get_modelz_models_v1_modelz_models_get","parameters":[{"name":"is_graduated","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter for graduated (singularity) models: true=graduated only, false=non-graduated only, null=all models","title":"Is Graduated"},"description":"Filter for graduated (singularity) models: true=graduated only, false=non-graduated only, null=all models"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/modelz/ids":{"get":{"summary":"Get Modelz Model Ids Endpoint","description":"Get a list of model IDs that exist on Modelz.\n\nThis is a lightweight endpoint that returns only the model IDs,\nuseful for checking which models have tokens on Modelz.\n\nQuery Parameters:\n- is_graduated: Filter for graduated models (same as /models/modelz)\n\nReturns:\n- List of model IDs from Modelz","operationId":"get_modelz_model_ids_endpoint_v1_modelz_ids_get","parameters":[{"name":"is_graduated","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter for graduated models: true=graduated only, false=non-graduated only, null=all models","title":"Is Graduated"},"description":"Filter for graduated models: true=graduated only, false=non-graduated only, null=all models"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/modelz/check/{model_id}":{"get":{"summary":"Check Model On Modelz","description":"Check if a specific model exists on Modelz.\n\nPath Parameters:\n- model_id: The model ID to check\n\nQuery Parameters:\n- is_graduated: Filter for graduated models when checking\n\nReturns:\n- Boolean indicating if model exists on Modelz\n- Additional model details if found","operationId":"check_model_on_modelz_v1_modelz_check__model_id__get","parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"}},{"name":"is_graduated","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter for graduated models when checking","title":"Is Graduated"},"description":"Filter for graduated models when checking"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/huggingface/discovery":{"get":{"tags":["huggingface-discovery"],"summary":"Discover Huggingface Models","description":"Discover HuggingFace models using the official Hub SDK.\n\nThis endpoint provides advanced model discovery with filtering by task type\nand sorting by popularity metrics (likes/downloads). Great for exploring\navailable models on HuggingFace Hub.\n\nUses the official huggingface_hub SDK for direct API access to Hub metadata.","operationId":"discover_huggingface_models_v1_huggingface_discovery_get","parameters":[{"name":"task","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by task type (e.g., 'text-generation', 'text2text-generation', 'conversational')","default":"text-generation","title":"Task"},"description":"Filter by task type (e.g., 'text-generation', 'text2text-generation', 'conversational')"},{"name":"sort","in":"query","required":false,"schema":{"type":"string","description":"Sort by: 'likes' or 'downloads'","default":"likes","title":"Sort"},"description":"Sort by: 'likes' or 'downloads'"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Number of models to return","default":50,"title":"Limit"},"description":"Number of models to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of results to skip","default":0,"title":"Offset"},"description":"Number of results to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/huggingface/search":{"get":{"tags":["huggingface-discovery"],"summary":"Search Huggingface Models Endpoint","description":"Search for HuggingFace models by query.\n\nSearches across model names, descriptions, and other metadata.\nUses the official huggingface_hub SDK.","operationId":"search_huggingface_models_endpoint_v1_huggingface_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"description":"Search query (model name, description, etc.)","title":"Q"},"description":"Search query (model name, description, etc.)"},{"name":"task","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional task filter","title":"Task"},"description":"Optional task filter"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of results to return","default":20,"title":"Limit"},"description":"Number of results to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of results to skip","default":0,"title":"Offset"},"description":"Number of results to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/huggingface/models/{model_id}/details":{"get":{"tags":["huggingface-discovery"],"summary":"Get Huggingface Model Details Endpoint","description":"Get detailed information about a specific HuggingFace model.\n\nReturns comprehensive metadata including model card, library info, and metrics.\nUses the official huggingface_hub SDK for direct Hub access.","operationId":"get_huggingface_model_details_endpoint_v1_huggingface_models__model_id__details_get","parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/huggingface/models/{model_id}/card":{"get":{"tags":["huggingface-discovery"],"summary":"Get Huggingface Model Card Endpoint","description":"Retrieve the model card (README) for a HuggingFace model.\n\nThe model card contains documentation, usage instructions, and metadata\nabout the model in Markdown format.","operationId":"get_huggingface_model_card_endpoint_v1_huggingface_models__model_id__card_get","parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/huggingface/author/{author}/models":{"get":{"tags":["huggingface-discovery"],"summary":"List Author Models Endpoint","description":"List all models from a specific HuggingFace author or organization.\n\nReturns all public models published by the specified author/org.","operationId":"list_author_models_endpoint_v1_huggingface_author__author__models_get","parameters":[{"name":"author","in":"path","required":true,"schema":{"type":"string","title":"Author"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Number of models to return","default":50,"title":"Limit"},"description":"Number of models to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/huggingface/models/{model_id}/files":{"get":{"tags":["huggingface-discovery"],"summary":"Get Model Files Endpoint","description":"Get information about all files in a HuggingFace model repository.\n\nReturns a list of files with sizes and metadata, useful for understanding\nwhat's available in the model repository.","operationId":"get_model_files_endpoint_v1_huggingface_models__model_id__files_get","parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/model-health":{"get":{"tags":["monitoring"],"summary":"Get All Model Health","description":"Get health metrics for all monitored models.\n\nReturns a list of model health records with response times, success rates,\nand last call information.\n\nArgs:\n    provider: Optional filter by provider (e.g., 'openrouter', 'huggingface')\n    status: Optional filter by last status\n    limit: Maximum number of records (1-1000)\n    offset: Number of records to skip for pagination\n\nReturns:\n    Dictionary with model health records and metadata","operationId":"get_all_model_health_v1_model_health_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by provider","title":"Provider"},"description":"Filter by provider"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by last status (success, error, timeout, etc.)","title":"Status"},"description":"Filter by last status (success, error, timeout, etc.)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Maximum number of records to return","default":100,"title":"Limit"},"description":"Maximum number of records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of records to skip","default":0,"title":"Offset"},"description":"Number of records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get All Model Health V1 Model Health Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/model-health/{provider}/{model}":{"get":{"tags":["monitoring"],"summary":"Get Model Health","description":"Get health metrics for a specific provider-model combination.\n\nArgs:\n    provider: Provider name (e.g., 'openrouter', 'huggingface')\n    model: Model identifier\n\nReturns:\n    Dictionary with health metrics for the specified model","operationId":"get_model_health_v1_model_health__provider___model__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}},{"name":"model","in":"path","required":true,"schema":{"type":"string","title":"Model"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Model Health V1 Model Health  Provider   Model  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/model-health/unhealthy":{"get":{"tags":["monitoring"],"summary":"Get Unhealthy Models","description":"Get models with high error rates (unhealthy models).\n\nArgs:\n    error_threshold: Minimum error rate to be considered unhealthy (default: 0.2 = 20%)\n    min_calls: Minimum number of calls required to evaluate health (default: 10)\n\nReturns:\n    List of unhealthy models with error rates","operationId":"get_unhealthy_models_v1_model_health_unhealthy_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"error_threshold","in":"query","required":false,"schema":{"type":"number","maximum":1.0,"minimum":0.0,"description":"Minimum error rate (0.0-1.0)","default":0.2,"title":"Error Threshold"},"description":"Minimum error rate (0.0-1.0)"},{"name":"min_calls","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Minimum number of calls to evaluate","default":10,"title":"Min Calls"},"description":"Minimum number of calls to evaluate"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Unhealthy Models V1 Model Health Unhealthy Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/model-health/stats":{"get":{"tags":["monitoring"],"summary":"Get Model Health Stats","description":"Get aggregate statistics for model health tracking.\n\nReturns:\n    Dictionary with aggregate statistics:\n    - total_models: Total number of tracked models\n    - total_calls: Total number of calls across all models\n    - total_success: Total successful calls\n    - total_errors: Total failed calls\n    - average_response_time: Average response time across all models\n    - success_rate: Overall success rate (0.0-1.0)","operationId":"get_model_health_stats_v1_model_health_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Model Health Stats V1 Model Health Stats Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/model-health/provider/{provider}/summary":{"get":{"tags":["monitoring"],"summary":"Get Provider Health Summary","description":"Get health summary for all models from a specific provider.\n\nArgs:\n    provider: Provider name (e.g., 'openrouter', 'huggingface')\n\nReturns:\n    Dictionary with provider-level statistics","operationId":"get_provider_health_summary_v1_model_health_provider__provider__summary_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Provider Health Summary V1 Model Health Provider  Provider  Summary Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/model-health/providers":{"get":{"tags":["monitoring"],"summary":"Get All Providers","description":"Get list of all providers with health data.\n\nReturns:\n    Dictionary with list of providers and their basic stats","operationId":"get_all_providers_v1_model_health_providers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get All Providers V1 Model Health Providers Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/status/":{"get":{"tags":["status-page"],"summary":"Get Overall Status","description":"Get overall system status for status page\n\nPublic endpoint - no authentication required.\nReturns current status, uptime, and basic metrics.","operationId":"get_overall_status_v1_status__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Overall Status V1 Status  Get"}}}}}}},"/v1/status/providers":{"get":{"tags":["status-page"],"summary":"Get Providers Status","description":"Get status for all providers\n\nPublic endpoint - no authentication required.\nReturns health status for each provider/gateway combination.","operationId":"get_providers_status_v1_status_providers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Response Get Providers Status V1 Status Providers Get"}}}}}}},"/v1/status/models":{"get":{"tags":["status-page"],"summary":"Get Models Status","description":"Get status for models\n\nPublic endpoint - no authentication required.\nSupports filtering and pagination.","operationId":"get_models_status_v1_status_models_get","parameters":[{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by provider","title":"Provider"},"description":"Filter by provider"},{"name":"gateway","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by gateway","title":"Gateway"},"description":"Filter by gateway"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status","title":"Status"},"description":"Filter by status"},{"name":"tier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by monitoring tier","title":"Tier"},"description":"Filter by monitoring tier"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Maximum number of results","default":100,"title":"Limit"},"description":"Maximum number of results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination","default":0,"title":"Offset"},"description":"Offset for pagination"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Get Models Status V1 Status Models Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/status/models/{provider}/{model_id}":{"get":{"tags":["status-page"],"summary":"Get Model Status","description":"Get status for a specific model\n\nPublic endpoint - no authentication required.\nReturns detailed status information for a single model.","operationId":"get_model_status_v1_status_models__provider___model_id__get","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}},{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"}},{"name":"gateway","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gateway"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Model Status V1 Status Models  Provider   Model Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/status/incidents":{"get":{"tags":["status-page"],"summary":"Get Incidents","description":"Get incidents\n\nPublic endpoint - no authentication required.\nReturns recent incidents with filtering.","operationId":"get_incidents_v1_status_incidents_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status (active, resolved)","title":"Status"},"description":"Filter by status (active, resolved)"},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by severity","title":"Severity"},"description":"Filter by severity"},{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by provider","title":"Provider"},"description":"Filter by provider"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Get Incidents V1 Status Incidents Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/status/uptime/{provider}/{model_id}":{"get":{"tags":["status-page"],"summary":"Get Model Uptime History","description":"Get uptime history for a specific model\n\nPublic endpoint - no authentication required.\nReturns time-series uptime data for charts.","operationId":"get_model_uptime_history_v1_status_uptime__provider___model_id__get","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}},{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"}},{"name":"gateway","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gateway"}},{"name":"period","in":"query","required":false,"schema":{"type":"string","description":"Time period: 24h, 7d, 30d","default":"24h","title":"Period"},"description":"Time period: 24h, 7d, 30d"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Model Uptime History V1 Status Uptime  Provider   Model Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/status/search":{"get":{"tags":["status-page"],"summary":"Search Models","description":"Search for models by name or provider\n\nPublic endpoint - no authentication required.","operationId":"search_models_v1_status_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query","title":"Q"},"description":"Search query"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Search Models V1 Status Search Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/status/stats":{"get":{"tags":["status-page"],"summary":"Get Stats","description":"Get overall statistics for status page\n\nPublic endpoint - no authentication required.\nReturns summary statistics and metrics.","operationId":"get_stats_v1_status_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Stats V1 Status Stats Get"}}}}}}},"/models":{"get":{"tags":["models"],"summary":"Get All Models","operationId":"get_all_models_models_get","parameters":[{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter models by provider","title":"Provider"},"description":"Filter models by provider"},{"name":"is_private","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by private models: true=private only, false=non-private only, null=all models","title":"Is Private"},"description":"Filter by private models: true=private only, false=non-private only, null=all models"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Limit number of results (default: 100, max: 1000)","default":100,"title":"Limit"},"description":"Limit number of results (default: 100, max: 1000)"},{"name":"offset","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Offset for pagination","default":0,"title":"Offset"},"description":"Offset for pagination"},{"name":"include_huggingface","in":"query","required":false,"schema":{"type":"boolean","description":"Include Hugging Face metrics for models that have hugging_face_id (slower, default: false)","default":false,"title":"Include Huggingface"},"description":"Include Hugging Face metrics for models that have hugging_face_id (slower, default: false)"},{"name":"gateway","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Gateway to use (e.g., 'openrouter', 'groq'), or 'all' for all gateways","default":"all","title":"Gateway"},"description":"Gateway to use (e.g., 'openrouter', 'groq'), or 'all' for all gateways"},{"name":"unique_models","in":"query","required":false,"schema":{"type":"boolean","description":"Return deduplicated models with provider arrays. Only applies when gateway='all'. Default: False (flat catalog). When true, each model appears once with an array of providers offering it. Example response: {id: 'gpt-4', providers: [{slug: 'openrouter', pricing: {...}}, ...]}","default":false,"title":"Unique Models"},"description":"Return deduplicated models with provider arrays. Only applies when gateway='all'. Default: False (flat catalog). When true, each model appears once with an array of providers offering it. Example response: {id: 'gpt-4', providers: [{slug: 'openrouter', pricing: {...}}, ...]}"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/models/detail":{"get":{"tags":["api-models"],"summary":"Get Model Detail","description":"Get specific model details using query parameters.\n\nThis endpoint provides compatibility with frontend clients that use query parameters\ninstead of the RESTful path-based endpoint /v1/models/{provider}/{model}.\n\nThe endpoint accepts either:\n- modelId: Full model ID in format \"developer/model-name\"\n- developer + modelName: Separate parameters for developer and model name\n\nExamples:\n    GET /api/models/detail?modelId=z-ai/glm-4-7\n    GET /api/models/detail?developer=z-ai&modelName=glm-4-7\n    GET /api/models/detail?modelId=openai/gpt-4&gateway=openrouter","operationId":"get_model_detail_api_models_detail_get","parameters":[{"name":"modelId","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Full model ID (e.g., 'z-ai/glm-4-7')","title":"Modelid"},"description":"Full model ID (e.g., 'z-ai/glm-4-7')"},{"name":"developer","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Developer/provider name (e.g., 'z-ai')","title":"Developer"},"description":"Developer/provider name (e.g., 'z-ai')"},{"name":"modelName","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Model name (e.g., 'glm-4-7')","title":"Modelname"},"description":"Model name (e.g., 'glm-4-7')"},{"name":"include_huggingface","in":"query","required":false,"schema":{"type":"boolean","description":"Include Hugging Face metrics if available","default":true,"title":"Include Huggingface"},"description":"Include Hugging Face metrics if available"},{"name":"gateway","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Gateway to use for fetching model data","title":"Gateway"},"description":"Gateway to use for fetching model data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health":{"get":{"tags":["health"],"summary":"Health Check","description":"Simple health check endpoint\n\nReturns basic health status for monitoring and load balancing.\n\nThis endpoint always returns HTTP 200 to indicate the application is running,\neven if the database is unavailable (degraded mode). Check the response body\nfor detailed status including database connectivity.","operationId":"health_check_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health/quick":{"get":{"tags":["health"],"summary":"Health Quick","description":"Ultra-fast health check - no database, no Redis, no I/O operations.\n\nUse this endpoint for uptime monitoring services with strict timeout requirements\n(e.g., Sentry uptime monitoring with 4-second timeout).\n\nThis endpoint:\n- Performs zero database queries\n- Performs zero Redis operations\n- Performs zero network calls\n- Returns immediately with HTTP 200\n\nFor detailed health status including database connectivity, use /health instead.","operationId":"health_quick_health_quick_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health/railway":{"get":{"tags":["health"],"summary":"Health Railway","description":"Railway-specific health check with validation and transient failure handling\n\nThis endpoint validates that critical services are operational:\n- Database connectivity (with timeout and retry)\n- Redis availability (via cached health data)\n- Minimum gateway health threshold (at least 30% gateways healthy)\n\nReturns:\n- HTTP 200 if system is operational or warming up\n- HTTP 503 if system is degraded or unhealthy\n\nUse this for Railway health checks to prevent marking the service as healthy\nwhen it's actually unable to process requests.\n\nNote: During startup, the service may be in \"warming_up\" mode where the\ndatabase connection and health cache are not yet available. This is normal\nand the health check will return HTTP 200 with \"warming_up\" status.\n\nTRANSIENT FAILURE FIX: Implements retry logic and graceful degradation\nto handle temporary network issues without falsely reporting unhealthy status.","operationId":"health_railway_health_railway_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health/system":{"get":{"tags":["health"],"summary":"Get System Health","description":"Get overall system health metrics\n\nReturns comprehensive system health information including:\n- Overall system status\n- Provider counts and statuses\n- Model counts and statuses\n- System uptime percentage\n\nNote: Health data is provided by the dedicated health-service container\nvia Redis cache. If cache is empty, default values are returned.\n\nQuery Parameters:\n- force_refresh: Currently ignored (data comes from health-service cache)","operationId":"get_system_health_health_system_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"force_refresh","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Force Refresh"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemHealthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health/providers":{"get":{"tags":["health"],"summary":"Get Providers Health","description":"Get health metrics for all providers\n\nReturns health information for all providers including:\n- Provider status and availability\n- Model counts per provider\n- Response times and uptime\n- Error information\n\nNote: Health data is provided by the dedicated health-service container\nvia Redis cache. If cache is empty, an empty list is returned.\n\nQuery Parameters:\n- gateway: Filter by specific gateway\n- force_refresh: Currently ignored (data comes from health-service cache)","operationId":"get_providers_health_health_providers_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"gateway","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by specific gateway","title":"Gateway"},"description":"Filter by specific gateway"},{"name":"force_refresh","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Force Refresh"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health/models":{"get":{"tags":["health"],"summary":"Get Models Health","description":"Get health metrics for all models\n\nReturns health information for all models including:\n- Model status and availability\n- Response times and success rates\n- Error counts and uptime\n- Last check timestamps\n\nNote: Health data is provided by the dedicated health-service container\nvia Redis cache. If cache is empty, an empty list is returned.\n\nQuery Parameters:\n- gateway: Filter by specific gateway\n- provider: Filter by specific provider\n- status: Filter by health status\n- force_refresh: Currently ignored (data comes from health-service cache)","operationId":"get_models_health_health_models_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"gateway","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by specific gateway","title":"Gateway"},"description":"Filter by specific gateway"},{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by specific provider","title":"Provider"},"description":"Filter by specific provider"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by health status","title":"Status"},"description":"Filter by health status"},{"name":"force_refresh","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Force Refresh"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health/catalog/models":{"get":{"tags":["health","catalog"],"summary":"Get Catalog Models","description":"Get ALL models from the model catalog (not just health-tracked ones)\n\nThis endpoint returns the complete model catalog from all gateway caches,\nincluding models that are not currently being health-monitored.\n\nUse this for:\n- Getting the full list of available models (9000+)\n- Browsing all models across all gateways\n- Model discovery and search\n\nPagination:\n- limit: Maximum records to return per request (default: 100, max: 1000)\n- offset: Number of records to skip (use for cursor-based pagination)\n- Example: Page 1 = offset=0, Page 2 = offset=100 (with limit=100)\n\nQuery Parameters:\n- gateway: Filter by specific gateway (e.g., 'openrouter', 'anthropic')\n- provider: Filter by specific provider\n\nNote: This returns catalog data, not health/monitoring data.\nFor health metrics, use /health/models instead.","operationId":"get_catalog_models_health_catalog_models_get","parameters":[{"name":"gateway","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by specific gateway","title":"Gateway"},"description":"Filter by specific gateway"},{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by specific provider","title":"Provider"},"description":"Filter by specific provider"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Maximum number of models to return","default":100,"title":"Limit"},"description":"Maximum number of models to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of models to skip for pagination","default":0,"title":"Offset"},"description":"Number of models to skip for pagination"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health/catalog/providers":{"get":{"tags":["health","catalog"],"summary":"Get Catalog Providers","description":"Get ALL providers/gateways from the gateway registry (not just health-tracked ones)\n\nThis endpoint returns the complete list of all configured gateways/providers,\nincluding those that may not have health data available.\n\nUse this for:\n- Getting the full list of available providers (26+)\n- Understanding which gateways are configured\n- Provider discovery and configuration status\n\nQuery Parameters:\n- priority: Filter by priority ('fast' or 'slow')\n\nNote: This returns registry/config data, not health/monitoring data.\nFor health metrics, use /health/providers instead.","operationId":"get_catalog_providers_health_catalog_providers_get","parameters":[{"name":"priority","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by priority ('fast' or 'slow')","title":"Priority"},"description":"Filter by priority ('fast' or 'slow')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health/model/{model_id}":{"get":{"tags":["health"],"summary":"Get Model Health","description":"Get health metrics for a specific model\n\nReturns detailed health information for the specified model including:\n- Current status and availability\n- Response time metrics\n- Success rate and uptime\n- Error information and timestamps\n\nNote: Health data is provided by the dedicated health-service container\nvia Redis cache.","operationId":"get_model_health_health_model__model_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"}},{"name":"gateway","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Specific gateway to check","title":"Gateway"},"description":"Specific gateway to check"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelHealthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health/provider/{provider}":{"get":{"tags":["health"],"summary":"Get Provider Health","description":"Get health metrics for a specific provider\n\nReturns detailed health information for the specified provider including:\n- Provider status and availability\n- Model counts and health distribution\n- Response time metrics\n- Overall uptime and error information\n\nNote: Health data is provided by the dedicated health-service container\nvia Redis cache.","operationId":"get_provider_health_health_provider__provider__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}},{"name":"gateway","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Specific gateway to check","title":"Gateway"},"description":"Specific gateway to check"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderHealthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health/summary":{"get":{"tags":["health"],"summary":"Get Health Summary","description":"Get comprehensive health summary\n\nReturns a complete health overview including:\n- System health metrics\n- All provider health data\n- All model health data\n- Monitoring status\n\nNote: Health data is provided by the dedicated health-service container\nvia Redis cache. If cache is empty, a default summary is returned.\n\nQuery Parameters:\n- force_refresh: Currently ignored (data comes from health-service cache)","operationId":"get_health_summary_health_summary_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"force_refresh","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Force Refresh"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthSummaryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health/check":{"post":{"tags":["health"],"summary":"Perform Health Check","description":"Trigger health check (deprecated)\n\nNote: Health monitoring is now handled by the dedicated health-service container.\nThis endpoint is kept for backwards compatibility but does not trigger checks.\nUse the health-service /check/trigger endpoint instead.","operationId":"perform_health_check_health_check_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthCheckRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Perform Health Check Health Check Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health/check/now":{"post":{"tags":["health","admin"],"summary":"Perform Immediate Health Check","description":"Perform immediate health check (deprecated)\n\nNote: Health monitoring is now handled by the dedicated health-service container.\nThis endpoint is kept for backwards compatibility but does not perform checks.\nUse the health-service /check/trigger endpoint instead.","operationId":"perform_immediate_health_check_health_check_now_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Perform Immediate Health Check Health Check Now Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health/uptime":{"get":{"tags":["health","uptime"],"summary":"Get Uptime Metrics","description":"Get uptime metrics for frontend integration\n\nReturns uptime metrics suitable for frontend status pages including:\n- Current status and uptime percentage\n- Response time averages\n- Request counts and error rates\n- Last incident information\n\nNote: Health data is provided by the dedicated health-service container\nvia Redis cache. If cache is empty, default values are returned.","operationId":"get_uptime_metrics_health_uptime_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UptimeMetricsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health/dashboard":{"get":{"tags":["health","dashboard"],"summary":"Get Health Dashboard","description":"Get complete health dashboard data for frontend\n\nReturns comprehensive health data formatted for frontend dashboard including:\n- System status with color indicators\n- Provider statuses with counts and metrics\n- Model statuses with response times and uptime\n- Uptime metrics for status page integration\n\nNote: Health data is provided by the dedicated health-service container\nvia Redis cache. If cache is empty, default values are returned.\n\nQuery Parameters:\n- force_refresh: Currently ignored (data comes from health-service cache)","operationId":"get_health_dashboard_health_dashboard_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"force_refresh","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Force Refresh"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthDashboardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health/status":{"get":{"tags":["health","status"],"summary":"Get Health Status","description":"Get simple health status for quick checks\n\nReturns a simple status response suitable for health checks and monitoring tools.\n\nNote: Health data is provided by the dedicated health-service container\nvia Redis cache.","operationId":"get_health_status_health_status_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Health Status Health Status Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health/monitoring/status":{"get":{"tags":["health","admin"],"summary":"Get Monitoring Status","description":"Get monitoring service status\n\nReturns the status of health and availability monitoring services.\n\nNote: Health monitoring is handled by the dedicated health-service container.\nThis endpoint shows the status of cached data from that service.","operationId":"get_monitoring_status_health_monitoring_status_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Monitoring Status Health Monitoring Status Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health/monitoring/start":{"post":{"tags":["health","admin"],"summary":"Start Health Monitoring","description":"Start health monitoring service (deprecated)\n\nNote: Health monitoring is now handled by the dedicated health-service container.\nThis endpoint is kept for backwards compatibility but does not start monitoring.","operationId":"start_health_monitoring_health_monitoring_start_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Start Health Monitoring Health Monitoring Start Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health/monitoring/stop":{"post":{"tags":["health","admin"],"summary":"Stop Health Monitoring","description":"Stop health monitoring service (deprecated)\n\nNote: Health monitoring is now handled by the dedicated health-service container.\nThis endpoint is kept for backwards compatibility but does not stop monitoring.","operationId":"stop_health_monitoring_health_monitoring_stop_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Stop Health Monitoring Health Monitoring Stop Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health/google-vertex":{"get":{"tags":["health"],"summary":"Check Google Vertex Health","description":"Check Google Vertex AI provider health\n\nReturns detailed diagnostics about Google Vertex AI configuration and credentials:\n- Configuration (project ID, region)\n- Credential loading status\n- Access token generation status\n- Overall health status\n\nThis endpoint does not require authentication and provides diagnostic information\nthat can help troubleshoot Google Vertex AI integration issues.\n\nExample response:\n```json\n{\n    \"provider\": \"google-vertex\",\n    \"health_status\": \"healthy\",\n    \"status\": \"healthy\",\n    \"diagnosis\": {\n        \"credentials_available\": true,\n        \"credential_source\": \"env_json\",\n        \"project_id\": \"my-project\",\n        \"location\": \"us-central1\",\n        \"token_available\": true,\n        \"token_valid\": true,\n        \"error\": null,\n        \"steps\": [...]\n    },\n    \"timestamp\": \"2025-01-01T12:00:00Z\"\n}\n```","operationId":"check_google_vertex_health_health_google_vertex_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health/database":{"get":{"tags":["health"],"summary":"Database Health","description":"Check database connectivity and health with retry logic for transient failures\n\nReturns database connection status and any errors.\nThis is critical for startup diagnostics in Railway.\n\nNote: Database query is wrapped with a 10-second timeout and includes retry logic\nto handle transient network issues and connection pool exhaustion.","operationId":"database_health_health_database_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health/providers/import-status":{"get":{"tags":["health","admin"],"summary":"Get Provider Import Status","description":"Check provider import status (for debugging)\n\nReturns which providers successfully imported and which failed.\nThis is essential for debugging chat endpoint issues in Railway.\n\nNote: This is different from /health/providers which returns health metrics.\nThis endpoint shows which provider modules loaded successfully at startup.","operationId":"get_provider_import_status_health_providers_import_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health/all":{"get":{"tags":["health"],"summary":"Get All Health","description":"Get comprehensive health information for all components.\n\nThis endpoint provides a complete overview of system health including:\n- System status\n- Provider health\n- Model health\n- Gateway health\n- Database status\n\nThis is an alias for /health/summary with additional details.\n\nQuery Parameters:\n- force_refresh: Currently ignored (data comes from health-service cache)","operationId":"get_all_health_health_all_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"force_refresh","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Force Refresh"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get All Health Health All Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health/models/stats":{"get":{"tags":["health"],"summary":"Get Models Health Stats","description":"Get health statistics for all models.\n\nThis endpoint provides aggregate statistics about model health including:\n- Total models count\n- Healthy/degraded/unhealthy counts\n- Average response times\n- Error rates by provider\n\nNote: Detailed per-model health is available at /model-health/stats","operationId":"get_models_health_stats_health_models_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Models Health Stats Health Models Stats Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health/providers/stats":{"get":{"tags":["health"],"summary":"Get Providers Health Stats","description":"Get health statistics for all providers.\n\nThis endpoint provides aggregate statistics about provider health including:\n- Total providers count\n- Healthy/degraded/unhealthy counts\n- Average response times per provider\n- Model counts per provider\n- Uptime percentages","operationId":"get_providers_health_stats_health_providers_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Providers Health Stats Health Providers Stats Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health/insights":{"get":{"tags":["health","insights"],"summary":"Get Health Insights","description":"Get actionable health insights with detailed breakdown.\n\nPart of fix for issue #1094 - Model Health Degradation.\n\nReturns comprehensive health analysis including:\n- Overall health status and percentage\n- Unhealthy models grouped by provider\n- Problematic providers (>30% failure rate)\n- Unconfigured gateways (missing API keys)\n- Actionable recommendations\n\nThis endpoint provides intelligence for debugging and improving system health.\nUse /health/dashboard for frontend display.\n\nNote: Health data is provided by the dedicated health-service container\nvia Redis cache. If cache is empty, minimal data is returned.","operationId":"get_health_insights_health_insights_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Health Insights Health Insights Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/availability/models":{"get":{"tags":["availability"],"summary":"Get Available Models","description":"Get available models with enhanced reliability features\n\nReturns models with availability status including:\n- Circuit breaker state\n- Fallback model suggestions\n- Maintenance status\n- Success rates and response times","operationId":"get_available_models_availability_models_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"gateway","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by specific gateway","title":"Gateway"},"description":"Filter by specific gateway"},{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by specific provider","title":"Provider"},"description":"Filter by specific provider"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by availability status","title":"Status"},"description":"Filter by availability status"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ModelAvailability"},"title":"Response Get Available Models Availability Models Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/availability/model/{model_id}":{"get":{"tags":["availability"],"summary":"Get Model Availability","description":"Get availability status for a specific model\n\nReturns detailed availability information including:\n- Current availability status\n- Circuit breaker state\n- Fallback model suggestions\n- Maintenance information\n- Performance metrics","operationId":"get_model_availability_availability_model__model_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"}},{"name":"gateway","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Specific gateway to check","title":"Gateway"},"description":"Specific gateway to check"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelAvailability"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/availability/check/{model_id}":{"get":{"tags":["availability"],"summary":"Check Model Availability","description":"Quick availability check for a model\n\nReturns a simple availability status suitable for quick checks.","operationId":"check_model_availability_availability_check__model_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"}},{"name":"gateway","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Specific gateway to check","title":"Gateway"},"description":"Specific gateway to check"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Check Model Availability Availability Check  Model Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/availability/fallback/{model_id}":{"get":{"tags":["availability"],"summary":"Get Fallback Models","description":"Get fallback models for a given model\n\nReturns suggested fallback models when the primary model is unavailable.","operationId":"get_fallback_models_availability_fallback__model_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"}},{"name":"gateway","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Specific gateway to check","title":"Gateway"},"description":"Specific gateway to check"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Fallback Models Availability Fallback  Model Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/availability/best/{model_id}":{"get":{"tags":["availability"],"summary":"Get Best Available Model","description":"Get the best available model with fallbacks\n\nReturns the best available model, trying fallbacks if the primary is unavailable.","operationId":"get_best_available_model_availability_best__model_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"}},{"name":"gateway","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Specific gateway to check","title":"Gateway"},"description":"Specific gateway to check"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Best Available Model Availability Best  Model Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/availability/summary":{"get":{"tags":["availability"],"summary":"Get Availability Summary","description":"Get availability summary across all models\n\nReturns comprehensive availability statistics including:\n- Total and available model counts\n- Gateway-wise breakdown\n- Overall availability percentage\n- Monitoring status","operationId":"get_availability_summary_availability_summary_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Availability Summary Availability Summary Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/availability/maintenance/{model_id}":{"post":{"tags":["availability","admin"],"summary":"Set Maintenance Mode","description":"Set maintenance mode for a model\n\nPlaces a model in maintenance mode until the specified time.","operationId":"set_maintenance_mode_availability_maintenance__model_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"}},{"name":"gateway","in":"query","required":true,"schema":{"type":"string","title":"Gateway"}},{"name":"until","in":"query","required":true,"schema":{"type":"string","format":"date-time","title":"Until"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Set Maintenance Mode Availability Maintenance  Model Id  Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["availability","admin"],"summary":"Clear Maintenance Mode","description":"Clear maintenance mode for a model\n\nRemoves maintenance mode and allows normal availability checking.","operationId":"clear_maintenance_mode_availability_maintenance__model_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"}},{"name":"gateway","in":"query","required":true,"schema":{"type":"string","title":"Gateway"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Clear Maintenance Mode Availability Maintenance  Model Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/availability/monitoring/start":{"post":{"tags":["availability","admin"],"summary":"Start Availability Monitoring","description":"Start availability monitoring service\n\nStarts the background availability monitoring service.","operationId":"start_availability_monitoring_availability_monitoring_start_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Start Availability Monitoring Availability Monitoring Start Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/availability/monitoring/stop":{"post":{"tags":["availability","admin"],"summary":"Stop Availability Monitoring","description":"Stop availability monitoring service\n\nStops the background availability monitoring service.","operationId":"stop_availability_monitoring_availability_monitoring_stop_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Stop Availability Monitoring Availability Monitoring Stop Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/availability/status":{"get":{"tags":["availability","status"],"summary":"Get Availability Status","description":"Get simple availability status for quick checks\n\nReturns a simple status response suitable for health checks and monitoring tools.","operationId":"get_availability_status_availability_status_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Availability Status Availability Status Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ping":{"get":{"summary":"Ping","description":"Ping endpoint that returns 'pong' and the number of times it has been called.\n\nReturns:\n    dict: Response with message 'pong' and the total count of pings\n\nExample response:\n    {\n        \"message\": \"pong\",\n        \"count\": 42,\n        \"timestamp\": \"2025-10-02T10:30:00.000000\"\n    }","operationId":"ping_ping_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/ping/stats":{"get":{"summary":"Ping Stats","description":"Get ping statistics.\n\nReturns:\n    dict: Statistics about ping usage\n\nExample response:\n    {\n        \"total_pings\": 42,\n        \"timestamp\": \"2025-10-02T10:30:00.000000\"\n    }","operationId":"ping_stats_ping_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/monitoring/health":{"get":{"tags":["monitoring"],"summary":"Get All Provider Health","description":"Get health scores for all providers.\n\nReturns a list of provider health scores (0-100) with status classification.\n\nAuthentication: Optional. Provide API key for authenticated access.","operationId":"get_all_provider_health_api_monitoring_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/HealthResponse"},"type":"array","title":"Response Get All Provider Health Api Monitoring Health Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/monitoring/health/{provider}":{"get":{"tags":["monitoring"],"summary":"Get Provider Health","description":"Get health score for a specific provider.\n\nArgs:\n    provider: Provider name (e.g., \"openrouter\", \"portkey\")\n\nAuthentication: Optional. Provide API key for authenticated access.","operationId":"get_provider_health_api_monitoring_health__provider__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/monitoring/errors/{provider}":{"get":{"tags":["monitoring"],"summary":"Get Provider Errors","description":"Get recent errors for a specific provider.\n\nArgs:\n    provider: Provider name\n    limit: Maximum number of errors (default: 100, max: 1000)\n\nAuthentication: Optional. Provide API key for authenticated access.","operationId":"get_provider_errors_api_monitoring_errors__provider__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Maximum number of errors to return","default":100,"title":"Limit"},"description":"Maximum number of errors to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ErrorResponse"},"title":"Response Get Provider Errors Api Monitoring Errors  Provider  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/monitoring/stats/realtime":{"get":{"tags":["monitoring"],"summary":"Get Realtime Stats","description":"Get real-time statistics from Redis for all providers.\n\nArgs:\n    hours: Number of hours to look back (default: 1, max: 24)\n\nAuthentication: Optional. Provide API key for authenticated access.","operationId":"get_realtime_stats_api_monitoring_stats_realtime_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":24,"minimum":1,"description":"Number of hours to look back","default":1,"title":"Hours"},"description":"Number of hours to look back"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RealtimeStatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/monitoring/stats/hourly/{provider}":{"get":{"tags":["monitoring"],"summary":"Get Hourly Stats","description":"Get hourly statistics for a specific provider.\n\nArgs:\n    provider: Provider name\n    hours: Number of hours to look back (default: 24, max: 168 = 1 week)\n\nAuthentication: Optional. Provide API key for authenticated access.","operationId":"get_hourly_stats_api_monitoring_stats_hourly__provider__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":168,"minimum":1,"description":"Number of hours to look back","default":24,"title":"Hours"},"description":"Number of hours to look back"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/monitoring/circuit-breakers":{"get":{"tags":["monitoring"],"summary":"Get All Circuit Breakers","description":"Get circuit breaker states for all provider/model combinations.\n\nReturns the current circuit breaker state, availability, and failure counts.\n\nAuthentication: Optional. Provide API key for authenticated access.","operationId":"get_all_circuit_breakers_api_monitoring_circuit_breakers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CircuitBreakerResponse"},"type":"array","title":"Response Get All Circuit Breakers Api Monitoring Circuit Breakers Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/monitoring/circuit-breakers/{provider}":{"get":{"tags":["monitoring"],"summary":"Get Provider Circuit Breakers","description":"Get circuit breaker states for a specific provider's models.\n\nArgs:\n    provider: Provider name\n\nAuthentication: Optional. Provide API key for authenticated access.","operationId":"get_provider_circuit_breakers_api_monitoring_circuit_breakers__provider__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CircuitBreakerResponse"},"title":"Response Get Provider Circuit Breakers Api Monitoring Circuit Breakers  Provider  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/monitoring/providers/comparison":{"get":{"tags":["monitoring"],"summary":"Get Provider Comparison","description":"Compare all providers across key metrics.\n\nReturns side-by-side comparison of providers including:\n- Total requests and success rates\n- Average latency\n- Total cost\n- Error rates\n- Health scores\n\nAuthentication: Optional. Provide API key for authenticated access.","operationId":"get_provider_comparison_api_monitoring_providers_comparison_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/monitoring/latency/{provider}/{model}":{"get":{"tags":["monitoring"],"summary":"Get Latency Percentiles","description":"Get latency percentiles for a specific provider/model combination.\n\nArgs:\n    provider: Provider name\n    model: Model ID\n    percentiles: Comma-separated percentiles (e.g., \"50,95,99\")\n\nAuthentication: Optional. Provide API key for authenticated access.","operationId":"get_latency_percentiles_api_monitoring_latency__provider___model__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}},{"name":"model","in":"path","required":true,"schema":{"type":"string","title":"Model"}},{"name":"percentiles","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated percentiles (e.g., 50,95,99)","default":"50,95,99","title":"Percentiles"},"description":"Comma-separated percentiles (e.g., 50,95,99)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LatencyPercentilesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/monitoring/anomalies":{"get":{"tags":["monitoring"],"summary":"Get Anomalies","description":"Get detected anomalies in metrics.\n\nDetects:\n- Cost spikes (>200% of average)\n- Latency spikes (>200% of average)\n- High error rates (>10%)\n\nReturns list of anomalies with severity classification.\n\nAuthentication: Optional. Provide API key for authenticated access.","operationId":"get_anomalies_api_monitoring_anomalies_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/monitoring/trial-analytics":{"get":{"tags":["monitoring"],"summary":"Get Trial Analytics","description":"Get trial funnel analytics.\n\nReturns metrics including:\n- Total signups\n- Trial activations\n- Conversions to paid\n- Conversion rates\n- Average time to conversion\n\nAuthentication: Optional. Provide API key for authenticated access.","operationId":"get_trial_analytics_api_monitoring_trial_analytics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/monitoring/cost-analysis":{"get":{"tags":["monitoring"],"summary":"Get Cost Analysis","description":"Get cost breakdown by provider.\n\nArgs:\n    days: Number of days to analyze (default: 7, max: 90)\n\nReturns cost breakdown including:\n- Total cost per provider\n- Cost per request\n- Total requests\n- Cost trends\n\nAuthentication: Optional. Provide API key for authenticated access.","operationId":"get_cost_analysis_api_monitoring_cost_analysis_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":1,"description":"Number of days to analyze","default":7,"title":"Days"},"description":"Number of days to analyze"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/monitoring/latency-trends/{provider}":{"get":{"tags":["monitoring"],"summary":"Get Latency Trends","description":"Get latency trends for a provider over time.\n\nArgs:\n    provider: Provider name\n    hours: Number of hours to analyze (default: 24, max: 168 = 1 week)\n\nReturns latency trends including:\n- Hourly average latency\n- P95 and P99 percentiles\n- Latency trends over time\n\nAuthentication: Optional. Provide API key for authenticated access.","operationId":"get_latency_trends_api_monitoring_latency_trends__provider__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":168,"minimum":1,"description":"Number of hours to analyze","default":24,"title":"Hours"},"description":"Number of hours to analyze"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/monitoring/error-rates":{"get":{"tags":["monitoring"],"summary":"Get Error Rates","description":"Get error rates broken down by model.\n\nArgs:\n    hours: Number of hours to analyze (default: 24, max: 168 = 1 week)\n\nReturns error rate breakdown including:\n- Error rate per model\n- Total requests and failures\n- Provider information\n\nAuthentication: Optional. Provide API key for authenticated access.","operationId":"get_error_rates_api_monitoring_error_rates_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":168,"minimum":1,"description":"Number of hours to analyze","default":24,"title":"Hours"},"description":"Number of hours to analyze"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/monitoring/token-efficiency/{provider}/{model}":{"get":{"tags":["monitoring"],"summary":"Get Token Efficiency","description":"Get token efficiency metrics for a provider/model.\n\nArgs:\n    provider: Provider name\n    model: Model ID\n\nReturns efficiency metrics including:\n- Cost per token\n- Tokens per request\n- Cost per request\n- Average input/output tokens\n\nAuthentication: Optional. Provide API key for authenticated access.","operationId":"get_token_efficiency_api_monitoring_token_efficiency__provider___model__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}},{"name":"model","in":"path","required":true,"schema":{"type":"string","title":"Model"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/monitoring/chat-requests/providers":{"get":{"tags":["monitoring"],"summary":"Get Providers With Requests","description":"Get all providers that have models with chat completion requests.\n\nReturns a list of providers that have at least one model with chat completion requests.\nUseful for building provider selection UI.\n\nReturns:\n- List of providers with:\n  - Provider information (id, name, slug)\n  - Count of models with requests\n  - Total requests across all models\n\nExample:\n- /api/monitoring/chat-requests/providers\n\nAuthentication: Optional. Provide API key for authenticated access.","operationId":"get_providers_with_requests_api_monitoring_chat_requests_providers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/monitoring/chat-requests/counts":{"get":{"tags":["monitoring"],"summary":"Get Request Counts By Model","description":"Get request counts for each model (lightweight endpoint).\n\nReturns a simple count of how many requests each model has received.\nThis is a lighter alternative to /chat-requests/models when you only need counts.\n\nReturns:\n- List of models with request counts, sorted by count (descending)\n- Each entry includes: model_id, model_name, provider name, request_count\n\nExample:\n- /api/monitoring/chat-requests/counts\n\nAuthentication: Optional. Provide API key for authenticated access.","operationId":"get_request_counts_by_model_api_monitoring_chat_requests_counts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/monitoring/chat-requests/models":{"get":{"tags":["monitoring"],"summary":"Get Models With Requests","description":"Get all unique models that have chat completion requests.\n\nReturns a list of all models that have been used in chat completion requests,\nalong with basic statistics for each model.\n\nQuery Parameters:\n- provider_id: Optional filter to only show models from a specific provider\n\nReturns:\n- List of models with:\n  - Model information (id, name, provider)\n  - Request count\n  - Total tokens used\n  - Average processing time\n\nExamples:\n- /api/monitoring/chat-requests/models (all models)\n- /api/monitoring/chat-requests/models?provider_id=5 (only models from provider 5)\n\nAuthentication: Optional. Provide API key for authenticated access.","operationId":"get_models_with_requests_api_monitoring_chat_requests_models_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by provider ID","title":"Provider Id"},"description":"Filter by provider ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/monitoring/chat-requests":{"get":{"tags":["monitoring"],"summary":"Get Chat Completion Requests","description":"Get chat completion requests with flexible filtering options.\n\nThis endpoint allows fetching chat completion request data for analytics and plotting graphs.\nYou can filter by model_id, provider_id, or model_name (or combine multiple filters).\n\nQuery Parameters:\n- model_id: Filter by specific model ID\n- provider_id: Filter by specific provider ID\n- model_name: Filter by model name (partial match/contains)\n- start_date: Filter requests created after this date (ISO format)\n- end_date: Filter requests created before this date (ISO format)\n- limit: Maximum number of records (default: 100, max: 100000)\n- offset: Pagination offset (default: 0)\n\nReturns:\n- List of chat completion requests with all metadata including:\n  - Request details (request_id, status, error_message)\n  - Token usage (input_tokens, output_tokens, total_tokens)\n  - Performance metrics (processing_time_ms)\n  - Model information (model_id, model_name, provider info)\n  - Timestamps (created_at)\n\nExamples:\n- /api/monitoring/chat-requests?model_id=123\n- /api/monitoring/chat-requests?provider_id=5\n- /api/monitoring/chat-requests?model_name=gpt-4\n- /api/monitoring/chat-requests?model_id=123&start_date=2025-12-01&end_date=2025-12-31\n- /api/monitoring/chat-requests?provider_id=5&limit=50\n\nAuthentication: Optional. Provide API key for authenticated access.","operationId":"get_chat_completion_requests_api_monitoring_chat_requests_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by model ID","title":"Model Id"},"description":"Filter by model ID"},{"name":"provider_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by provider ID","title":"Provider Id"},"description":"Filter by provider ID"},{"name":"model_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by model name (contains)","title":"Model Name"},"description":"Filter by model name (contains)"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by start date (ISO format: YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS)","title":"Start Date"},"description":"Filter by start date (ISO format: YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by end date (ISO format: YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS)","title":"End Date"},"description":"Filter by end date (ISO format: YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100000,"minimum":1,"description":"Maximum number of records to return","default":100,"title":"Limit"},"description":"Maximum number of records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of records to skip (pagination)","default":0,"title":"Offset"},"description":"Number of records to skip (pagination)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/monitoring/chat-requests/plot-data":{"get":{"tags":["monitoring"],"summary":"Get Chat Requests Plot Data","description":"Get optimized chat completion request data for plotting.\n\nReturns:\n- recent_requests: Last 10 full requests for display\n- plot_data: ALL requests but only tokens and latency (compressed arrays)\n\nThis is highly optimized for frontend plotting:\n- Minimal data transfer (only what's needed for graphs)\n- Compressed format (arrays instead of objects)\n- Fast response time\n\nExamples:\n- /api/monitoring/chat-requests/plot-data?model_id=123\n- /api/monitoring/chat-requests/plot-data?provider_id=5\n\nAuthentication: Optional. Provide API key for authenticated access.","operationId":"get_chat_requests_plot_data_api_monitoring_chat_requests_plot_data_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by model ID","title":"Model Id"},"description":"Filter by model ID"},{"name":"provider_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by provider ID","title":"Provider Id"},"description":"Filter by provider ID"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by start date (ISO format)","title":"Start Date"},"description":"Filter by start date (ISO format)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by end date (ISO format)","title":"End Date"},"description":"Filter by end date (ISO format)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/diagnostics/concurrency":{"get":{"tags":["diagnostics"],"summary":"Get Concurrency Stats","description":"Get real-time concurrency gate statistics.\n\nReturns detailed information about current active requests, queued requests,\nand utilization percentages to help diagnose 503 Service Unavailable errors.\n\nThis endpoint is useful for:\n- Identifying when the concurrency gate is near capacity\n- Detecting queue overflow conditions\n- Understanding request backpressure in real-time\n- Troubleshooting 503 errors from queue_full/queue_timeout rejections\n\nReturns:\n    dict: Concurrency statistics including:\n        - active_requests: Current number of requests being processed\n        - queued_requests: Current number of requests waiting in queue\n        - concurrency_limit: Maximum concurrent requests allowed\n        - queue_size_limit: Maximum queue size\n        - utilization_percent: Active slots usage (0-100)\n        - queue_utilization_percent: Queue usage (0-100)\n        - status: Overall health status (healthy/warning/critical)","operationId":"get_concurrency_stats_api_diagnostics_concurrency_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Concurrency Stats Api Diagnostics Concurrency Get"}}}}}}},"/api/diagnostics/provider-timing":{"get":{"tags":["diagnostics"],"summary":"Get Provider Timing Summary","description":"Get summary of provider response times from Prometheus metrics.\n\nReturns aggregated metrics showing which providers are slow and contributing\nto concurrency slot blocking.\n\nReturns:\n    dict: Provider timing summary with:\n        - metrics_available: Whether Prometheus metrics are accessible\n        - slow_providers: List of providers with >30s response times\n        - note: Instructions for viewing detailed metrics","operationId":"get_provider_timing_summary_api_diagnostics_provider_timing_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Provider Timing Summary Api Diagnostics Provider Timing Get"}}}}}}},"/api/diagnostics/health":{"get":{"tags":["diagnostics"],"summary":"Diagnostics Health","description":"Health check endpoint for diagnostics API.\n\nReturns:\n    dict: Simple health status","operationId":"diagnostics_health_api_diagnostics_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Diagnostics Health Api Diagnostics Health Get"}}}}}}},"/api/instrumentation/health":{"get":{"tags":["instrumentation","instrumentation"],"summary":"Instrumentation Health","description":"Get instrumentation health status.\n\nReturns:\n    dict: Status of Loki and Tempo integration","operationId":"instrumentation_health_api_instrumentation_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/instrumentation/trace-context":{"get":{"tags":["instrumentation","instrumentation"],"summary":"Get Trace Context","description":"Get current trace and span context.\n\nReturns:\n    dict: Current trace ID and span ID for correlation","operationId":"get_trace_context_api_instrumentation_trace_context_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/instrumentation/loki/status":{"get":{"tags":["instrumentation","instrumentation"],"summary":"Loki Status","description":"Get Loki logging status and configuration.\n\nRequires admin API key.\n\nReturns:\n    dict: Loki configuration and status","operationId":"loki_status_api_instrumentation_loki_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/instrumentation/tempo/status":{"get":{"tags":["instrumentation","instrumentation"],"summary":"Tempo Status","description":"Get Tempo tracing status and configuration.\n\nRequires admin API key.\n\nReturns:\n    dict: Tempo configuration and status","operationId":"tempo_status_api_instrumentation_tempo_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/instrumentation/config":{"get":{"tags":["instrumentation","instrumentation"],"summary":"Instrumentation Config","description":"Get complete instrumentation configuration.\n\nRequires admin API key.\n\nReturns:\n    dict: Full instrumentation setup details","operationId":"instrumentation_config_api_instrumentation_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/instrumentation/test-trace":{"post":{"tags":["instrumentation","instrumentation"],"summary":"Test Trace","description":"Generate a test trace for verification with force flush.\n\nRequires admin API key.\n\nReturns:\n    dict: Test trace information with export status","operationId":"test_trace_api_instrumentation_test_trace_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/instrumentation/test-log":{"post":{"tags":["instrumentation","instrumentation"],"summary":"Test Log","description":"Generate a test log for verification.\n\nRequires admin API key.\n\nReturns:\n    dict: Test log information","operationId":"test_log_api_instrumentation_test_log_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/instrumentation/environment-variables":{"get":{"tags":["instrumentation","instrumentation"],"summary":"Environment Variables","description":"Get instrumentation-related environment variables.\n\nRequires admin API key.\n\nReturns:\n    dict: Environment variables (sensitive values masked)","operationId":"environment_variables_api_instrumentation_environment_variables_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/instrumentation/otel/status":{"get":{"tags":["instrumentation","instrumentation"],"summary":"Otel Status","description":"Get detailed OpenTelemetry status.\n\nRequires admin API key.\n\nReturns:\n    dict: Current OTel initialization status and configuration","operationId":"otel_status_api_instrumentation_otel_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/metrics/status":{"get":{"tags":["metrics","metrics"],"summary":"Metrics Status","description":"Get metrics service status.\n\nReturns:\n    dict: Status of metrics collection including mode (live/synthetic)","operationId":"metrics_status_api_metrics_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/metrics/summary":{"get":{"tags":["metrics","metrics"],"summary":"Metrics Summary","description":"Get structured metrics summary for dashboard overview.\n\nReturns:\n    dict: Summary of key metrics and system state","operationId":"metrics_summary_api_metrics_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/metrics/test":{"post":{"tags":["metrics","metrics"],"summary":"Test Metrics","description":"Generate test metrics for verification.\n\nThis endpoint generates sample metrics data to verify:\n- Prometheus scraping is working\n- Loki is receiving structured logs\n- Tempo is receiving traces\n\nReturns:\n    dict: Test results with trace IDs for correlation","operationId":"test_metrics_api_metrics_test_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/metrics/grafana-queries":{"get":{"tags":["metrics","metrics"],"summary":"Grafana Queries","description":"Get PromQL queries for Grafana dashboard panels.\n\nReturns:\n    dict: PromQL queries for each dashboard panel","operationId":"grafana_queries_api_metrics_grafana_queries_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/metrics/health":{"get":{"tags":["metrics","metrics"],"summary":"Metrics Health","description":"Health check for metrics collection.\n\nReturns:\n    dict: Health status of metrics subsystem","operationId":"metrics_health_api_metrics_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/providers/":{"get":{"tags":["Providers Management"],"summary":"List Providers","description":"Get all providers\n\nReturns list of all providers with their current status","operationId":"list_providers_providers__get","parameters":[{"name":"is_active_only","in":"query","required":false,"schema":{"type":"boolean","description":"Only return active providers","default":true,"title":"Is Active Only"},"description":"Only return active providers"},{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","description":"Include inactive providers","default":false,"title":"Include Inactive"},"description":"Include inactive providers"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProviderResponse"},"title":"Response List Providers Providers  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Providers Management"],"summary":"Create Provider Endpoint","description":"Create a new provider\n\nArgs:\n    provider: Provider creation data\n\nReturns created provider","operationId":"create_provider_endpoint_providers__post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/providers/stats":{"get":{"tags":["Providers Management"],"summary":"Get Provider Statistics","description":"Get provider statistics\n\nReturns overall statistics about providers including:\n- Total count\n- Active/inactive counts\n- Health status distribution","operationId":"get_provider_statistics_providers_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderStats"}}}}}}},"/providers/search":{"get":{"tags":["Providers Management"],"summary":"Search Providers Endpoint","description":"Search providers by name, slug, or description\n\nArgs:\n    q: Search query string\n\nReturns list of matching providers","operationId":"search_providers_endpoint_providers_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"description":"Search query","title":"Q"},"description":"Search query"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProviderResponse"},"title":"Response Search Providers Endpoint Providers Search Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/providers/health/{health_status}":{"get":{"tags":["Providers Management"],"summary":"Get Providers By Health","description":"Get providers by health status\n\nArgs:\n    health_status: Health status to filter by\n\nReturns list of providers with specified health status","operationId":"get_providers_by_health_providers_health__health_status__get","parameters":[{"name":"health_status","in":"path","required":true,"schema":{"type":"string","description":"Health status: 'healthy', 'degraded', 'down', 'unknown'","title":"Health Status"},"description":"Health status: 'healthy', 'degraded', 'down', 'unknown'"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProviderResponse"},"title":"Response Get Providers By Health Providers Health  Health Status  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/providers/{provider_id}":{"get":{"tags":["Providers Management"],"summary":"Get Provider","description":"Get a specific provider by ID\n\nArgs:\n    provider_id: Provider ID\n\nReturns provider details","operationId":"get_provider_providers__provider_id__get","parameters":[{"name":"provider_id","in":"path","required":true,"schema":{"type":"integer","title":"Provider Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Providers Management"],"summary":"Update Provider Endpoint","description":"Update a provider\n\nArgs:\n    provider_id: Provider ID\n    provider: Provider update data (only specified fields will be updated)\n\nReturns updated provider","operationId":"update_provider_endpoint_providers__provider_id__patch","parameters":[{"name":"provider_id","in":"path","required":true,"schema":{"type":"integer","title":"Provider Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Providers Management"],"summary":"Delete Provider Endpoint","description":"Delete a provider (hard delete)\n\nArgs:\n    provider_id: Provider ID\n\nNote: This will cascade delete all models associated with this provider","operationId":"delete_provider_endpoint_providers__provider_id__delete","parameters":[{"name":"provider_id","in":"path","required":true,"schema":{"type":"integer","title":"Provider Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/providers/slug/{slug}":{"get":{"tags":["Providers Management"],"summary":"Get Provider By Slug Endpoint","description":"Get a specific provider by slug\n\nArgs:\n    slug: Provider slug (e.g., 'openrouter', 'portkey')\n\nReturns provider details","operationId":"get_provider_by_slug_endpoint_providers_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/ProviderResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/providers/{provider_id}/models/stats":{"get":{"tags":["Providers Management"],"summary":"Get Provider Model Stats","description":"Get model statistics for a specific provider\n\nArgs:\n    provider_id: Provider ID\n\nReturns model statistics for the provider","operationId":"get_provider_model_stats_providers__provider_id__models_stats_get","parameters":[{"name":"provider_id","in":"path","required":true,"schema":{"type":"integer","title":"Provider Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/providers/{provider_id}/health":{"patch":{"tags":["Providers Management"],"summary":"Update Provider Health Endpoint","description":"Update provider health status\n\nArgs:\n    provider_id: Provider ID\n    health_update: Health status update data\n\nReturns updated provider","operationId":"update_provider_health_endpoint_providers__provider_id__health_patch","parameters":[{"name":"provider_id","in":"path","required":true,"schema":{"type":"integer","title":"Provider Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderHealthUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/providers/{provider_id}/activate":{"post":{"tags":["Providers Management"],"summary":"Activate Provider Endpoint","description":"Activate a provider\n\nArgs:\n    provider_id: Provider ID\n\nReturns activated provider","operationId":"activate_provider_endpoint_providers__provider_id__activate_post","parameters":[{"name":"provider_id","in":"path","required":true,"schema":{"type":"integer","title":"Provider Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/providers/{provider_id}/deactivate":{"post":{"tags":["Providers Management"],"summary":"Deactivate Provider Endpoint","description":"Deactivate a provider (soft delete)\n\nArgs:\n    provider_id: Provider ID\n\nReturns deactivated provider","operationId":"deactivate_provider_endpoint_providers__provider_id__deactivate_post","parameters":[{"name":"provider_id","in":"path","required":true,"schema":{"type":"integer","title":"Provider Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/catalog/models-db/":{"get":{"tags":["Models Catalog Management"],"summary":"List Models","description":"Get all models with optional filters\n\nReturns list of all models with their provider information","operationId":"list_models_catalog_models_db__get","parameters":[{"name":"provider_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by provider ID","title":"Provider Id"},"description":"Filter by provider ID"},{"name":"provider_slug","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by provider slug","title":"Provider Slug"},"description":"Filter by provider slug"},{"name":"is_active_only","in":"query","required":false,"schema":{"type":"boolean","description":"Only return active models","default":true,"title":"Is Active Only"},"description":"Only return active models"},{"name":"health_status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by health status","title":"Health Status"},"description":"Filter by health status"},{"name":"modality","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by modality","title":"Modality"},"description":"Filter by modality"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Maximum results","default":100,"title":"Limit"},"description":"Maximum results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination","default":0,"title":"Offset"},"description":"Offset for pagination"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ModelWithProvider"},"title":"Response List Models Catalog Models Db  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Models Catalog Management"],"summary":"Create Model Endpoint","description":"Create a new model\n\nArgs:\n    model: Model creation data\n\nReturns created model","operationId":"create_model_endpoint_catalog_models_db__post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/catalog/models-db/stats":{"get":{"tags":["Models Catalog Management"],"summary":"Get Model Statistics","description":"Get model statistics\n\nReturns overall statistics about models including:\n- Total count\n- Active/inactive counts\n- Health status distribution\n- Count by modality","operationId":"get_model_statistics_catalog_models_db_stats_get","parameters":[{"name":"provider_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by provider ID","title":"Provider Id"},"description":"Filter by provider ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelStats"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/catalog/models-db/search":{"get":{"tags":["Models Catalog Management"],"summary":"Search Models Endpoint","description":"Search models by name, model_id, or description\n\nArgs:\n    q: Search query string\n    provider_id: Optional provider filter\n\nReturns list of matching models","operationId":"search_models_endpoint_catalog_models_db_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"description":"Search query","title":"Q"},"description":"Search query"},{"name":"provider_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Optional provider filter","title":"Provider Id"},"description":"Optional provider filter"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ModelWithProvider"},"title":"Response Search Models Endpoint Catalog Models Db Search Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/catalog/models-db/health/{health_status}":{"get":{"tags":["Models Catalog Management"],"summary":"Get Models By Health","description":"Get models by health status\n\nArgs:\n    health_status: Health status to filter by\n\nReturns list of models with specified health status","operationId":"get_models_by_health_catalog_models_db_health__health_status__get","parameters":[{"name":"health_status","in":"path","required":true,"schema":{"type":"string","description":"Health status: 'healthy', 'degraded', 'down', 'unknown'","title":"Health Status"},"description":"Health status: 'healthy', 'degraded', 'down', 'unknown'"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ModelWithProvider"},"title":"Response Get Models By Health Catalog Models Db Health  Health Status  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/catalog/models-db/provider/{provider_slug}":{"get":{"tags":["Models Catalog Management"],"summary":"Get Models By Provider","description":"Get all models for a specific provider\n\nArgs:\n    provider_slug: Provider slug (e.g., 'openrouter', 'portkey')\n    is_active_only: Only return active models\n\nReturns list of models for the provider","operationId":"get_models_by_provider_catalog_models_db_provider__provider_slug__get","parameters":[{"name":"provider_slug","in":"path","required":true,"schema":{"type":"string","title":"Provider Slug"}},{"name":"is_active_only","in":"query","required":false,"schema":{"type":"boolean","description":"Only return active models","default":true,"title":"Is Active Only"},"description":"Only return active models"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ModelWithProvider"},"title":"Response Get Models By Provider Catalog Models Db Provider  Provider Slug  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/catalog/models-db/{model_id}":{"get":{"tags":["Models Catalog Management"],"summary":"Get Model","description":"Get a specific model by ID\n\nArgs:\n    model_id: Model ID\n\nReturns model details with provider information","operationId":"get_model_catalog_models_db__model_id__get","parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"integer","title":"Model Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelWithProvider"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Models Catalog Management"],"summary":"Update Model Endpoint","description":"Update a model\n\nArgs:\n    model_id: Model ID\n    model: Model update data (only specified fields will be updated)\n\nReturns updated model","operationId":"update_model_endpoint_catalog_models_db__model_id__patch","parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"integer","title":"Model Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Models Catalog Management"],"summary":"Delete Model Endpoint","description":"Delete a model (hard delete)\n\nArgs:\n    model_id: Model ID","operationId":"delete_model_endpoint_catalog_models_db__model_id__delete","parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"integer","title":"Model Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/catalog/models-db/{model_id}/health/history":{"get":{"tags":["Models Catalog Management"],"summary":"Get Model Health History Endpoint","description":"Get health check history for a model\n\nArgs:\n    model_id: Model ID\n    limit: Maximum number of records to return\n\nReturns list of health check records","operationId":"get_model_health_history_endpoint_catalog_models_db__model_id__health_history_get","parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"integer","title":"Model Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Maximum results","default":100,"title":"Limit"},"description":"Maximum results"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ModelHealthHistoryResponse"},"title":"Response Get Model Health History Endpoint Catalog Models Db  Model Id  Health History Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/catalog/models-db/bulk":{"post":{"tags":["Models Catalog Management"],"summary":"Bulk Create Models Endpoint","description":"Create multiple models at once\n\nArgs:\n    bulk_data: Bulk model creation data\n\nReturns list of created models","operationId":"bulk_create_models_endpoint_catalog_models_db_bulk_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelBulkCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ModelResponse"},"type":"array","title":"Response Bulk Create Models Endpoint Catalog Models Db Bulk Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/catalog/models-db/upsert":{"post":{"tags":["Models Catalog Management"],"summary":"Upsert Model Endpoint","description":"Upsert a model (insert or update if exists)\n\nArgs:\n    model: Model data\n\nReturns upserted model","operationId":"upsert_model_endpoint_catalog_models_db_upsert_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/catalog/models-db/bulk-upsert":{"post":{"tags":["Models Catalog Management"],"summary":"Bulk Upsert Models Endpoint","description":"Upsert multiple models at once (insert or update if exists)\n\nArgs:\n    bulk_data: Bulk model data\n\nReturns list of upserted models","operationId":"bulk_upsert_models_endpoint_catalog_models_db_bulk_upsert_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelBulkCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ModelResponse"},"type":"array","title":"Response Bulk Upsert Models Endpoint Catalog Models Db Bulk Upsert Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/catalog/models-db/{model_id}/health":{"patch":{"tags":["Models Catalog Management"],"summary":"Update Model Health Endpoint","description":"Update model health status\n\nArgs:\n    model_id: Model ID\n    health_update: Health status update data\n\nReturns updated model","operationId":"update_model_health_endpoint_catalog_models_db__model_id__health_patch","parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"integer","title":"Model Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelHealthUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/catalog/models-db/{model_id}/activate":{"post":{"tags":["Models Catalog Management"],"summary":"Activate Model Endpoint","description":"Activate a model\n\nArgs:\n    model_id: Model ID\n\nReturns activated model","operationId":"activate_model_endpoint_catalog_models_db__model_id__activate_post","parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"integer","title":"Model Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/catalog/models-db/{model_id}/deactivate":{"post":{"tags":["Models Catalog Management"],"summary":"Deactivate Model Endpoint","description":"Deactivate a model (soft delete)\n\nArgs:\n    model_id: Model ID\n\nReturns deactivated model","operationId":"deactivate_model_endpoint_catalog_models_db__model_id__deactivate_post","parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"integer","title":"Model Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/model-sync/providers":{"get":{"tags":["Admin - Model Sync"],"summary":"List Available Providers","description":"Get list of providers that can be synced\n\nReturns list of all provider slugs that have fetch functions configured.","operationId":"list_available_providers_admin_model_sync_providers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderListResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/admin/model-sync/provider/{provider_slug}":{"post":{"tags":["Admin - Model Sync"],"summary":"Sync Single Provider","description":"Sync models from a specific provider's API to database\n\nThis endpoint:\n1. Ensures the provider exists in the database (creates if needed)\n2. Fetches the latest model catalog from the provider's API\n3. Transforms models to database schema\n4. Upserts models into the database (insert or update)\n\nArgs:\n    provider_slug: Provider identifier (e.g., 'openrouter', 'deepinfra')\n    dry_run: If True, performs fetch and transformation but doesn't write to DB\n\nReturns:\n    Sync results including counts and any errors","operationId":"sync_single_provider_admin_model_sync_provider__provider_slug__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider_slug","in":"path","required":true,"schema":{"type":"string","title":"Provider Slug"}},{"name":"dry_run","in":"query","required":false,"schema":{"type":"boolean","description":"Fetch but don't write to database","default":false,"title":"Dry Run"},"description":"Fetch but don't write to database"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/model-sync/all":{"post":{"tags":["Admin - Model Sync"],"summary":"Sync All Provider Models","description":"Sync models from all providers (or specified list)\n\nThis is a bulk operation that:\n1. Ensures all providers exist in the database\n2. Fetches models from each provider's API in sequence\n3. Transforms and syncs all models to the database\n\nArgs:\n    providers: Optional list of specific providers to sync. If not provided, syncs all.\n    dry_run: If True, performs fetch and transformation but doesn't write to DB\n\nReturns:\n    Aggregate sync results across all providers\n\nExample:\n    POST /admin/model-sync/all\n    POST /admin/model-sync/all?providers=openrouter&providers=deepinfra\n    POST /admin/model-sync/all?dry_run=true","operationId":"sync_all_provider_models_admin_model_sync_all_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"providers","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Specific providers to sync (comma-separated). If not provided, syncs all providers.","title":"Providers"},"description":"Specific providers to sync (comma-separated). If not provided, syncs all providers."},{"name":"dry_run","in":"query","required":false,"schema":{"type":"boolean","description":"Fetch but don't write to database","default":false,"title":"Dry Run"},"description":"Fetch but don't write to database"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/model-sync/status":{"get":{"tags":["Admin - Model Sync"],"summary":"Get Sync Status","description":"Get current sync status and statistics\n\nReturns information about:\n- Available providers\n- Providers configured with fetch functions\n- Current database statistics","operationId":"get_sync_status_admin_model_sync_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Sync Status Admin Model Sync Status Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/admin/model-sync/full":{"post":{"tags":["Admin - Model Sync"],"summary":"Trigger Full Provider And Model Sync","description":"Trigger a complete sync of providers and models\n\nThis endpoint performs a full synchronization in two phases:\n1. **Provider Sync**: Verifies providers exist in database\n   - DB is the source of truth for provider configuration (Phase 2A)\n   - Provider metadata managed via migrations and admin APIs\n\n2. **Model Sync**: Syncs models from all configured providers\n   - Fetches latest model catalogs from each provider's API\n   - Transforms and upserts models to database\n   - Updates pricing, capabilities, and metadata\n\nThis is the recommended way to fully refresh the catalog.\n\nArgs:\n    dry_run: If True, performs sync operations but doesn't write to DB\n\nReturns:\n    Combined sync results from both providers and models\n\nExample:\n    POST /admin/model-sync/full\n    POST /admin/model-sync/full?dry_run=true","operationId":"trigger_full_provider_and_model_sync_admin_model_sync_full_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"dry_run","in":"query","required":false,"schema":{"type":"boolean","description":"Fetch but don't write to database","default":false,"title":"Dry Run"},"description":"Fetch but don't write to database"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/model-sync/providers-only":{"post":{"tags":["Admin - Model Sync"],"summary":"Sync Providers Only","description":"Refresh provider registry cache from database.\n\nThe DB providers table is the source of truth (Phase 2A). This endpoint\nrefreshes the in-memory gateway registry cache and returns current status.\n\nReturns:\n    Provider sync results\n\nExample:\n    POST /admin/model-sync/providers-only","operationId":"sync_providers_only_admin_model_sync_providers_only_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/admin/model-sync/flush-models":{"delete":{"tags":["Admin - Model Sync"],"summary":"Flush Models","description":"Flush (delete all records from) the models table\n\n⚠️ **WARNING: This is a destructive operation!** ⚠️\n\nThis endpoint deletes ALL models from the database while preserving the providers table.\nUse this when you want to:\n- Clean up all model data before a full resync\n- Remove legacy/malformed model data\n- Reset the models catalog to a clean state\n\n**Safety Requirements:**\n- Requires confirmation parameter: `confirm=DELETE_ALL_MODELS`\n- Admin authentication required\n- Operation is logged for audit purposes\n\n**What gets deleted:**\n- All records in the `models` table\n\n**What is preserved:**\n- All records in the `providers` table\n- All other database tables\n\n**Recommended workflow:**\n1. Flush models: `DELETE /admin/model-sync/flush-models?confirm=DELETE_ALL_MODELS`\n2. Resync models: `POST /admin/model-sync/full`\n\nArgs:\n    confirm: Must be exactly \"DELETE_ALL_MODELS\" to proceed\n\nReturns:\n    Flush results including count of deleted models\n\nExample:\n    ```bash\n    curl -X DELETE \"http://api/admin/model-sync/flush-models?confirm=DELETE_ALL_MODELS\" \\\n      -H \"Authorization: Bearer YOUR_ADMIN_KEY\"\n    ```","operationId":"flush_models_admin_model_sync_flush_models_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"confirm","in":"query","required":true,"schema":{"type":"string","description":"Must be 'DELETE_ALL_MODELS' to confirm","title":"Confirm"},"description":"Must be 'DELETE_ALL_MODELS' to confirm"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/model-sync/flush-providers":{"delete":{"tags":["Admin - Model Sync"],"summary":"Flush Providers","description":"Flush (delete all records from) the providers table (cascades to models)\n\n⚠️ **EXTREME WARNING: This is a HIGHLY destructive operation!** ⚠️\n\nThis endpoint deletes ALL providers AND all associated models from the database.\nDue to the CASCADE constraint on the foreign key, deleting providers automatically\ndeletes all models that reference them.\n\n**Use this when you want to:**\n- Perform a complete database reset\n- Start fresh with a clean providers and models catalog\n- Fix fundamental data structure issues\n\n**Safety Requirements:**\n- Requires confirmation parameter: `confirm=DELETE_EVERYTHING`\n- Admin authentication required\n- Operation is logged for audit purposes\n\n**What gets deleted:**\n- All records in the `providers` table\n- All records in the `models` table (CASCADE)\n\n**Database schema reference:**\n```sql\n\"provider_id\" INTEGER REFERENCES \"public\".\"providers\"(\"id\") ON DELETE CASCADE\n```\n\n**Recommended workflow:**\n1. Flush everything: `DELETE /admin/model-sync/flush-providers?confirm=DELETE_EVERYTHING`\n2. Resync everything: `POST /admin/model-sync/full`\n\nArgs:\n    confirm: Must be exactly \"DELETE_EVERYTHING\" to proceed\n\nReturns:\n    Flush results including counts of deleted providers and models\n\nExample:\n    ```bash\n    curl -X DELETE \"http://api/admin/model-sync/flush-providers?confirm=DELETE_EVERYTHING\" \\\n      -H \"Authorization: Bearer YOUR_ADMIN_KEY\"\n    ```","operationId":"flush_providers_admin_model_sync_flush_providers_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"confirm","in":"query","required":true,"schema":{"type":"string","description":"Must be 'DELETE_EVERYTHING' to confirm","title":"Confirm"},"description":"Must be 'DELETE_EVERYTHING' to confirm"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/model-sync/reset-and-resync":{"post":{"tags":["Admin - Model Sync"],"summary":"Reset And Resync","description":"Atomic operation: Flush models table and immediately resync from providers\n\nThis endpoint performs a complete refresh of the models catalog in a single operation:\n1. **Flush**: Delete all models (preserves providers)\n2. **Resync**: Immediately trigger full sync from all provider APIs\n\n**Benefits of atomic operation:**\n- Single API call instead of two\n- Ensures models are repopulated immediately\n- Reduces time window where database is empty\n- Automatic rollback if sync fails\n\n**What happens:**\n1. Deletes all models from database\n2. Verifies providers exist in DB (source of truth)\n3. Syncs models from all provider APIs\n4. Returns combined results\n\n**Safety:**\n- Admin authentication required\n- Operation is logged\n- If sync fails, database will be empty (no rollback)\n\n**Use cases:**\n- Clean database refresh\n- Fix malformed model data\n- Update all model metadata\n- Recovery from sync issues\n\n**Timeline:**\n- Flush: < 1 second\n- Provider sync: < 1 second\n- Model sync: 5-30 minutes (depends on number of providers)\n- Total: ~5-30 minutes\n\nReturns:\n    Combined results from flush and sync operations\n\nExample:\n    ```bash\n    curl -X POST \"http://api/admin/model-sync/reset-and-resync\" \\\n      -H \"Authorization: Bearer YOUR_ADMIN_KEY\"\n    ```\n\nNote: This endpoint does NOT require confirmation since it immediately repopulates\nthe database. If you want to flush without resyncing, use the separate flush endpoints.","operationId":"reset_and_resync_admin_model_sync_reset_and_resync_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/admin/model-sync/health":{"get":{"tags":["Admin - Model Sync","Health"],"summary":"Get Scheduled Sync Health","description":"Get health status of scheduled model sync service.\n\nReturns metrics about the scheduled sync job including:\n- Last run time\n- Success rate\n- Health status\n- Configuration\n\nThis endpoint is used for monitoring and alerting.\n\nExample Response:\n```json\n{\n    \"is_healthy\": true,\n    \"health_reason\": \"Healthy\",\n    \"enabled\": true,\n    \"last_success_time\": \"2024-01-29T10:30:00Z\",\n    \"minutes_since_last_sync\": 15,\n    \"success_rate\": 100.0,\n    \"total_runs\": 48,\n    \"successful_runs\": 48,\n    \"failed_runs\": 0\n}\n```","operationId":"get_scheduled_sync_health_admin_model_sync_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/admin/model-sync/trigger":{"post":{"tags":["Admin - Model Sync","Admin"],"summary":"Trigger Manual Sync","description":"Manually trigger a model sync job.\n\nThis endpoint allows admins to manually trigger a sync outside of the\nscheduled interval. Useful for:\n- Immediate updates after provider changes\n- Testing the sync process\n- Recovery after errors\n\nThe sync runs in the background - check logs for progress.\n\nReturns:\n    Status message and timestamp","operationId":"trigger_manual_sync_admin_model_sync_trigger_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/admin/model-sync/incremental":{"post":{"tags":["Admin - Model Sync","Admin"],"summary":"Sync Incremental","description":"🚀 **Incremental Sync with Change Detection** (Recommended)\n\nThis is the **OPTIMIZED** sync method that:\n1. Fetches models from ALL provider APIs\n2. Compares with existing DB using content hashing (SHA-256)\n3. **Only writes models that have changed** (new or updated)\n4. Only invalidates cache for providers with changes\n5. Invalidates global cache once at the end (if any changes)\n\n## Why Use This?\n- **Minimal DB writes**: Only changed models are written\n- **Minimal cache invalidation**: Only affected caches are cleared\n- **No API downtime**: Doesn't block requests during sync\n- **Detailed metrics**: See exactly what changed\n\n## Typical Results:\n- Change rate: 2-5% (most models unchanged)\n- Efficiency gain: 95-98% (fewer DB operations)\n- Duration: 50-80% faster than full sync\n\n## Example Response:\n```json\n{\n  \"success\": true,\n  \"message\": \"Incremental sync completed successfully\",\n  \"details\": {\n    \"total_providers\": 35,\n    \"providers_synced\": 35,\n    \"providers_with_changes\": 3,\n    \"changed_providers\": [\"openrouter\", \"groq\", \"anthropic\"],\n    \"total_models_fetched\": 13247,\n    \"total_models_changed\": 84,\n    \"total_models_unchanged\": 13163,\n    \"total_models_synced\": 84,\n    \"change_rate_percent\": 0.63,\n    \"efficiency_gain_percent\": 99.37,\n    \"total_duration_seconds\": 45.8\n  }\n}\n```\n\nArgs:\n    providers: Optional list of specific providers to sync\n    dry_run: If True, shows what would change without writing to DB\n\nReturns:\n    Detailed sync results with change metrics","operationId":"sync_incremental_admin_model_sync_incremental_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"providers","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Specific providers to sync. If not provided, syncs all providers.","title":"Providers"},"description":"Specific providers to sync. If not provided, syncs all providers."},{"name":"dry_run","in":"query","required":false,"schema":{"type":"boolean","description":"Detect changes but don't write to database","default":false,"title":"Dry Run"},"description":"Detect changes but don't write to database"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health/gateways/{gateway}/fix":{"post":{"tags":["health"],"summary":"Trigger Gateway Fix","description":"Trigger a targeted gateway diagnostics run with optional auto-fix.\n\nReturns structured status along with captured logs so operators can review\nwhat happened without leaving the dashboard.","operationId":"trigger_gateway_fix_health_gateways__gateway__fix_post","parameters":[{"name":"gateway","in":"path","required":true,"schema":{"type":"string","title":"Gateway"}},{"name":"auto_fix","in":"query","required":false,"schema":{"type":"boolean","description":"Attempt to auto-fix the specified gateway after running diagnostics.","default":true,"title":"Auto Fix"},"description":"Attempt to auto-fix the specified gateway after running diagnostics."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/cache/debouncer/stats":{"get":{"tags":["admin","cache","monitoring"],"summary":"Get Cache Debouncer Stats","description":"Get cache debouncer statistics (Issue #1099).\n\nShows effectiveness of debouncing in preventing cache thrashing:\n- Number of invalidations scheduled\n- Number executed vs coalesced (deduplicated)\n- Efficiency percentage\n- Currently pending invalidations\n\nReturns detailed metrics about the cache debouncing system.","operationId":"get_cache_debouncer_stats_admin_cache_debouncer_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/cache/warmer/stats":{"get":{"tags":["admin","cache","monitoring"],"summary":"Get Cache Warmer Stats","description":"Get cache warmer statistics including:\n- Background refresh counts\n- Request coalescing effectiveness\n- Error rates\n- Currently in-flight refreshes\n\nReturns detailed metrics about the cache warming system.","operationId":"get_cache_warmer_stats_admin_cache_warmer_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/cache/status":{"get":{"tags":["admin","cache"],"summary":"Get Cache Status","description":"Get cache status for all gateways.\n\nReturns information about:\n- Number of models cached per gateway\n- Last refresh timestamp\n- TTL (Time To Live)\n- Cache size estimate\n\n**Example Response:**\n```json\n{\n    \"openrouter\": {\n        \"models_cached\": 250,\n        \"last_refresh\": \"2025-01-15T10:30:00Z\",\n        \"ttl_seconds\": 3600,\n        \"status\": \"healthy\"\n    },\n    ...\n}\n```","operationId":"get_cache_status_admin_cache_status_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/cache/refresh/{gateway}":{"post":{"tags":["admin","cache"],"summary":"Refresh Gateway Cache","description":"Force refresh cache for a specific gateway.\n\n**Parameters:**\n- `gateway`: The gateway to refresh (openrouter, featherless, etc.)\n- `force`: If true, refresh even if cache is still valid\n\n**Example:**\n```bash\ncurl -X POST \"http://localhost:8000/cache/refresh/openrouter?force=true\"\n```","operationId":"refresh_gateway_cache_admin_cache_refresh__gateway__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"gateway","in":"path","required":true,"schema":{"type":"string","title":"Gateway"}},{"name":"force","in":"query","required":false,"schema":{"type":"boolean","description":"Force refresh even if cache is still valid","default":false,"title":"Force"},"description":"Force refresh even if cache is still valid"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/cache/clear":{"post":{"tags":["admin","cache"],"summary":"Clear All Caches","description":"Clear cache for all gateways or a specific gateway.\n\n**Warning:** This will remove all cached data. Use with caution.","operationId":"clear_all_caches_admin_cache_clear_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"gateway","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Specific gateway to clear, or all if not specified","title":"Gateway"},"description":"Specific gateway to clear, or all if not specified"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health/gateways":{"get":{"tags":["health"],"summary":"Check All Gateways","description":"Get health status of all 28 configured gateways from health-service cache.\n\n**Performance:** Uses cached data from health-service (sub-second response).\n**Data Source:** Redis cache updated by health-service every 60 seconds.\n**Coverage:** All 28 gateways from GATEWAY_CONFIG.\n\n**Returns:**\n```json\n{\n    \"success\": true,\n    \"data\": {\n        \"openrouter\": {\n            \"status\": \"healthy\",\n            \"latency_ms\": 150,\n            \"available\": true,\n            \"last_check\": \"2025-01-15T10:30:00Z\",\n            \"error\": null\n        },\n        ...\n    },\n    \"summary\": {\n        \"total_gateways\": 28,\n        \"healthy\": 20,\n        \"degraded\": 0,\n        \"unhealthy\": 0,\n        \"unconfigured\": 8,\n        \"overall_health_percentage\": 100.0\n    },\n    \"timestamp\": \"2025-01-15T10:30:00Z\",\n    \"metadata\": {\n        \"cache_age_seconds\": 45,\n        \"data_source\": \"health-service-cache\"\n    }\n}\n```\n\n**Note:** If no cached data is available, returns empty data with metadata.\nRun model sync to populate database if gateways are showing as unconfigured.","operationId":"check_all_gateways_health_gateways_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health/gateways/dashboard":{"get":{"tags":["health"],"summary":"Gateway Health Dashboard","description":"Render an HTML dashboard view of the comprehensive gateway health check.","operationId":"gateway_health_dashboard_health_gateways_dashboard_get","parameters":[{"name":"auto_fix","in":"query","required":false,"schema":{"type":"boolean","description":"Attempt to auto-fix failing gateways using the CLI logic before rendering the dashboard.","default":false,"title":"Auto Fix"},"description":"Attempt to auto-fix failing gateways using the CLI logic before rendering the dashboard."}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health/gateways/dashboard/data":{"get":{"tags":["health"],"summary":"Gateway Health Dashboard Data","description":"Expose the dashboard data as JSON for programmatic consumption.","operationId":"gateway_health_dashboard_data_health_gateways_dashboard_data_get","parameters":[{"name":"auto_fix","in":"query","required":false,"schema":{"type":"boolean","description":"Attempt to auto-fix failing gateways using the CLI logic before returning the payload.","default":false,"title":"Auto Fix"},"description":"Attempt to auto-fix failing gateways using the CLI logic before returning the payload."},{"name":"include_logs","in":"query","required":false,"schema":{"type":"boolean","description":"Include captured stdout logs from the CLI run in the response.","default":false,"title":"Include Logs"},"description":"Include captured stdout logs from the CLI run in the response."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health/{gateway}":{"get":{"tags":["health"],"summary":"Check Single Gateway","description":"Check health status of a specific gateway with detailed diagnostics.\n\n**Parameters:**\n- `gateway`: Gateway name (openrouter, featherless, etc.)\n\n**Returns detailed health information including:**\n- API connectivity\n- Response latency\n- Models available\n- Cache status","operationId":"check_single_gateway_health__gateway__get","parameters":[{"name":"gateway","in":"path","required":true,"schema":{"type":"string","title":"Gateway"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/cache/modelz/status":{"get":{"tags":["admin","cache","modelz"],"summary":"Get Modelz Cache Status","description":"Get the current status of the Modelz cache.\n\nReturns information about:\n- Cache validity status\n- Number of tokens cached\n- Last refresh timestamp\n- Cache age and TTL\n\n**Example Response:**\n```json\n{\n  \"status\": \"valid\",\n  \"message\": \"Modelz cache is valid\",\n  \"cache_size\": 53,\n  \"timestamp\": 1705123456.789,\n  \"ttl\": 1800,\n  \"age_seconds\": 245.3,\n  \"is_valid\": true\n}\n```","operationId":"get_modelz_cache_status_admin_cache_modelz_status_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/cache/modelz/refresh":{"post":{"tags":["admin","cache","modelz"],"summary":"Refresh Modelz Cache Endpoint","description":"Force refresh the Modelz cache by fetching fresh data from the API.\n\nThis endpoint:\n- Clears the existing Modelz cache\n- Fetches fresh data from the Modelz API\n- Updates the cache with new data\n\n**Example Response:**\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"status\": \"success\",\n    \"message\": \"Modelz cache refreshed with 53 tokens\",\n    \"cache_size\": 53,\n    \"timestamp\": 1705123456.789,\n    \"ttl\": 1800\n  },\n  \"timestamp\": \"2024-01-15T10:30:45.123Z\"\n}\n```","operationId":"refresh_modelz_cache_endpoint_admin_cache_modelz_refresh_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/cache/modelz/clear":{"delete":{"tags":["admin","cache","modelz"],"summary":"Clear Modelz Cache Endpoint","description":"Clear the Modelz cache.\n\nThis endpoint:\n- Removes all cached Modelz data\n- Resets cache timestamps\n- Forces next request to fetch fresh data from API\n\n**Example Response:**\n```json\n{\n  \"success\": true,\n  \"message\": \"Modelz cache cleared successfully\",\n  \"timestamp\": \"2024-01-15T10:30:45.123Z\"\n}\n```","operationId":"clear_modelz_cache_endpoint_admin_cache_modelz_clear_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/api/cache/invalidate":{"post":{"tags":["admin","cache"],"summary":"Invalidate Cache","description":"Invalidate cache for specified gateway or cache type.\n\nThis endpoint is called by the frontend dashboard to invalidate caches\nafter configuration changes.\n\n**Performance:** Returns immediately and performs invalidation in the background.\nThis prevents long wait times when clearing multiple gateway caches.\n\n**Parameters:**\n- `gateway`: Optional gateway name to invalidate (e.g., 'openrouter', 'together')\n- `cache_type`: Optional cache type ('models', 'providers', 'pricing')\n\n**Example:**\n```bash\ncurl -X POST \"http://localhost:8000/api/cache/invalidate?gateway=openrouter\"\n```\n\n**Note:** The actual cache invalidation happens asynchronously in the background.\nCheck logs for completion status.","operationId":"invalidate_cache_admin_api_cache_invalidate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"gateway","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Specific gateway cache to invalidate, or all if not specified","title":"Gateway"},"description":"Specific gateway cache to invalidate, or all if not specified"},{"name":"cache_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Type of cache to invalidate: 'models', 'providers', 'pricing', or all if not specified","title":"Cache Type"},"description":"Type of cache to invalidate: 'models', 'providers', 'pricing', or all if not specified"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/cache/pricing/refresh":{"post":{"tags":["admin","cache","pricing"],"summary":"Refresh Pricing Cache Endpoint","description":"Force refresh the pricing cache by reloading from the manual pricing file.\n\nThis endpoint:\n- Clears the existing pricing cache\n- Reloads pricing data from manual_pricing.json\n- Updates the in-memory pricing cache\n\n**Example Response:**\n```json\n{\n  \"success\": true,\n  \"message\": \"Pricing cache refreshed successfully\",\n  \"providers_loaded\": 15,\n  \"timestamp\": \"2024-01-15T10:30:45.123Z\"\n}\n```","operationId":"refresh_pricing_cache_endpoint_admin_cache_pricing_refresh_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/velocity-mode-status":{"get":{"tags":["security","monitoring"],"summary":"Get Velocity Mode Status","description":"Get the current velocity mode status from the security middleware.\n\nVelocity mode is an automatic protection system that activates during high error rates\nto protect the service from cascading failures by temporarily reducing rate limits.\n\n**Returns:**\n```json\n{\n    \"active\": false,\n    \"until\": null,\n    \"remaining_seconds\": 0,\n    \"trigger_count\": 0,\n    \"current_error_rate\": 0.0,\n    \"sample_size\": 0,\n    \"threshold\": 25.0,\n    \"limits\": {\n        \"normal\": {\n            \"ip_limit\": 300,\n            \"strict_ip_limit\": 60,\n            \"fingerprint_limit\": 100\n        },\n        \"velocity\": {\n            \"ip_limit\": 150,\n            \"strict_ip_limit\": 30,\n            \"fingerprint_limit\": 50\n        }\n    }\n}\n```\n\n**Status Codes:**\n- 200: Successfully retrieved velocity mode status\n- 503: Security middleware not available","operationId":"get_velocity_mode_status_velocity_mode_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health/optimizations":{"get":{"summary":"Get Optimization Health","description":"Get health and statistics for all optimization systems.\n\nReturns:\n    Dictionary containing stats for connection pools, cache, and prioritization","operationId":"get_optimization_health_health_optimizations_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Optimization Health Health Optimizations Get"}}}}}}},"/health/optimizations/connection-pools":{"get":{"summary":"Get Connection Pool Stats","description":"Get detailed connection pool statistics.\n\nReturns:\n    Dictionary with connection pool metrics","operationId":"get_connection_pool_stats_health_optimizations_connection_pools_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Connection Pool Stats Health Optimizations Connection Pools Get"}}}}}}},"/admin/health/optimizations/cache":{"get":{"summary":"Get Cache Health","description":"Get response cache statistics.\n\nReturns:\n    Dictionary with cache metrics including hit rate","operationId":"get_cache_health_admin_health_optimizations_cache_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Cache Health Admin Health Optimizations Cache Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health/optimizations/prioritization":{"get":{"summary":"Get Prioritization Stats","description":"Get request prioritization statistics.\n\nReturns:\n    Dictionary with priority distribution and metrics","operationId":"get_prioritization_stats_health_optimizations_prioritization_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Prioritization Stats Health Optimizations Prioritization Get"}}}}}}},"/admin/health/optimizations/cache/clear":{"post":{"summary":"Clear Cache","description":"Clear the response cache.\n\nReturns:\n    Success message","operationId":"clear_cache_admin_health_optimizations_cache_clear_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"title":"Response Clear Cache Admin Health Optimizations Cache Clear Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health/providers/uptime":{"get":{"tags":["health","monitoring"],"summary":"Get Providers Uptime","description":"Get provider uptime timeline with time-bucketed samples.\n\nReturns uptime percentage, status samples, and incident summaries for each provider.\n\nCached for 5 minutes to reduce database load.","operationId":"get_providers_uptime_health_providers_uptime_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"enum":["24h","72h","7d"],"type":"string","description":"Time period for uptime analysis","default":"72h","title":"Period"},"description":"Time period for uptime analysis"},{"name":"bucket","in":"query","required":false,"schema":{"enum":["5m","1h"],"type":"string","description":"Time bucket size for sampling","default":"1h","title":"Bucket"},"description":"Time bucket size for sampling"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderUptimeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health/models/uptime":{"get":{"tags":["health","monitoring"],"summary":"Get Models Uptime","description":"Get model uptime timeline with time-bucketed samples.\n\nReturns uptime percentage, status samples, and incident summaries for top models.\n\nCached for 5 minutes to reduce database load.","operationId":"get_models_uptime_health_models_uptime_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"enum":["24h","72h","7d"],"type":"string","description":"Time period for uptime analysis","default":"72h","title":"Period"},"description":"Time period for uptime analysis"},{"name":"bucket","in":"query","required":false,"schema":{"enum":["5m","1h"],"type":"string","description":"Time bucket size for sampling","default":"1h","title":"Bucket"},"description":"Time bucket size for sampling"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Maximum number of models to return","default":10,"title":"Limit"},"description":"Maximum number of models to return"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelUptimeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health/gateways/uptime":{"get":{"tags":["health","monitoring"],"summary":"Get Gateways Uptime","description":"Get gateway uptime timeline with time-bucketed samples.\n\nReturns uptime percentage, status samples, and incident summaries for each gateway.\nIncludes all configured gateways, even those without recent history data.\n\nCached for 5 minutes to reduce database load.","operationId":"get_gateways_uptime_health_gateways_uptime_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"enum":["24h","72h","7d"],"type":"string","description":"Time period for uptime analysis","default":"72h","title":"Period"},"description":"Time period for uptime analysis"},{"name":"bucket","in":"query","required":false,"schema":{"enum":["5m","1h"],"type":"string","description":"Time bucket size for sampling","default":"1h","title":"Bucket"},"description":"Time bucket size for sampling"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GatewayUptimeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/error-monitor/health":{"get":{"tags":["error-monitor"],"summary":"Monitor Health","description":"Check if error monitoring is enabled with detailed status.","operationId":"monitor_health_error_monitor_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/error-monitor/autonomous/status":{"get":{"tags":["error-monitor"],"summary":"Autonomous Monitor Status","description":"Get autonomous monitoring status.","operationId":"autonomous_monitor_status_error_monitor_autonomous_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/error-monitor/errors/recent":{"get":{"tags":["error-monitor"],"summary":"Get Recent Errors","description":"Get recent errors from logs.","operationId":"get_recent_errors_error_monitor_errors_recent_get","parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":24,"minimum":1,"default":1,"title":"Hours"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/error-monitor/errors/critical":{"get":{"tags":["error-monitor"],"summary":"Get Critical Errors","description":"Get critical and high-severity errors.","operationId":"get_critical_errors_error_monitor_errors_critical_get","parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":24,"minimum":1,"default":1,"title":"Hours"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/error-monitor/errors/fixable":{"get":{"tags":["error-monitor"],"summary":"Get Fixable Errors","description":"Get errors that can be automatically fixed.","operationId":"get_fixable_errors_error_monitor_errors_fixable_get","parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":24,"minimum":1,"default":1,"title":"Hours"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/error-monitor/errors/patterns":{"get":{"tags":["error-monitor"],"summary":"Get Error Patterns","description":"Get tracked error patterns.","operationId":"get_error_patterns_error_monitor_errors_patterns_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/error-monitor/fixes/generate-for-error":{"post":{"tags":["error-monitor"],"summary":"Generate Fix For Error","description":"Generate a fix for a specific error.","operationId":"generate_fix_for_error_error_monitor_fixes_generate_for_error_post","parameters":[{"name":"error_id","in":"query","required":true,"schema":{"type":"string","title":"Error Id"}},{"name":"create_pr","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Create Pr"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/error-monitor/fixes/generate-batch":{"post":{"tags":["error-monitor"],"summary":"Generate Fixes Batch","description":"Generate fixes for multiple errors.","operationId":"generate_fixes_batch_error_monitor_fixes_generate_batch_post","parameters":[{"name":"error_ids","in":"query","required":true,"schema":{"type":"array","items":{"type":"string"},"title":"Error Ids"}},{"name":"create_prs","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Create Prs"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/error-monitor/fixes/generated":{"get":{"tags":["error-monitor"],"summary":"Get Generated Fixes","description":"Get all generated fixes.","operationId":"get_generated_fixes_error_monitor_fixes_generated_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/error-monitor/fixes/{fix_id}":{"get":{"tags":["error-monitor"],"summary":"Get Fix Details","description":"Get details of a specific fix.","operationId":"get_fix_details_error_monitor_fixes__fix_id__get","parameters":[{"name":"fix_id","in":"path","required":true,"schema":{"type":"string","title":"Fix Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/error-monitor/dashboard":{"get":{"tags":["error-monitor"],"summary":"Error Dashboard","description":"Get comprehensive error dashboard data.","operationId":"error_dashboard_error_monitor_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/error-monitor/monitor/start":{"post":{"tags":["error-monitor"],"summary":"Start Continuous Monitoring","description":"Start continuous error monitoring.","operationId":"start_continuous_monitoring_error_monitor_monitor_start_post","parameters":[{"name":"interval","in":"query","required":false,"schema":{"type":"integer","maximum":3600,"minimum":60,"default":300,"title":"Interval"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/error-monitor/monitor/scan":{"post":{"tags":["error-monitor"],"summary":"Scan For Errors","description":"Trigger a manual scan for errors.","operationId":"scan_for_errors_error_monitor_monitor_scan_post","parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":24,"minimum":1,"default":1,"title":"Hours"}},{"name":"auto_fix","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Auto Fix"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/":{"get":{"tags":["authentication"],"summary":"Root","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/auth":{"post":{"tags":["authentication"],"summary":"Privy Auth","description":"Authenticate user via Privy and return API key","operationId":"privy_auth_auth_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrivyAuthRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrivyAuthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/register":{"post":{"tags":["authentication"],"summary":"Register User","description":"Register a new user with username and email","operationId":"register_user_auth_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserRegistrationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserRegistrationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/password-reset":{"post":{"tags":["authentication"],"summary":"Request Password Reset","description":"Request password reset email","operationId":"request_password_reset_auth_password_reset_post","parameters":[{"name":"email","in":"query","required":true,"schema":{"type":"string","title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/reset-password":{"post":{"tags":["authentication"],"summary":"Reset Password","description":"Reset password using token","operationId":"reset_password_auth_reset_password_post","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/health":{"get":{"tags":["authentication","health"],"summary":"Auth Health Check","description":"Dedicated health check endpoint for authentication service.\n\nReturns comprehensive health status including:\n- Database connectivity (Supabase)\n- Redis cache availability\n- Auth cache statistics\n- Query timeout configuration\n- Overall auth service status\n\nThis endpoint does not require authentication and is suitable for\nload balancer health checks and monitoring systems.","operationId":"auth_health_check_auth_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/user/balance":{"get":{"tags":["authentication"],"summary":"Get User Balance","operationId":"get_user_balance_user_balance_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/user/monitor":{"get":{"tags":["authentication"],"summary":"User Monitor","operationId":"user_monitor_user_monitor_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/user/limit":{"get":{"tags":["authentication"],"summary":"User Get Rate Limits","operationId":"user_get_rate_limits_user_limit_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/user/profile":{"get":{"tags":["authentication"],"summary":"Get User Profile Endpoint","description":"Get user profile information","operationId":"get_user_profile_endpoint_user_profile_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["authentication"],"summary":"Update User Profile Endpoint","description":"Update user profile information","operationId":"update_user_profile_endpoint_user_profile_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfileUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/user/account":{"delete":{"tags":["authentication"],"summary":"Delete User Account Endpoint","description":"Delete a user account and all associated data","operationId":"delete_user_account_endpoint_user_account_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteAccountRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteAccountResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/user/credit-transactions":{"get":{"tags":["authentication"],"summary":"Get Credit Transactions Endpoint","description":"Get credit transaction history for the authenticated user\n\nShows all credit additions and deductions including:\n- Trial credits\n- Stripe purchases\n- API usage\n- Admin adjustments\n- Refunds\n- Bonuses\n\nArgs:\n    limit: Maximum number of transactions to return (default: 50)\n    offset: Number of transactions to skip (default: 0)\n    transaction_type: Optional filter by type (trial, purchase, api_usage, etc.)\n    api_key: Authenticated user's API key\n\nReturns:\n    List of credit transactions (sanitized for user consumption)","operationId":"get_credit_transactions_endpoint_user_credit_transactions_get","security":[{"HTTPBearer":[]}],"parameters":[{"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":"transaction_type","in":"query","required":false,"schema":{"type":"string","title":"Transaction Type"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/user/api-keys":{"post":{"tags":["authentication"],"summary":"Create User Api Key","description":"Create a new API key for the user","operationId":"create_user_api_key_user_api_keys_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateApiKeyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["authentication"],"summary":"List User Api Keys","description":"Get all API keys for the authenticated user","operationId":"list_user_api_keys_user_api_keys_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/user/api-keys/{key_id}":{"put":{"tags":["authentication"],"summary":"Update User Api Key Endpoint","description":"Update an existing API key for the user","operationId":"update_user_api_key_endpoint_user_api_keys__key_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"integer","title":"Key Id"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateApiKeyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["authentication"],"summary":"Delete User Api Key","description":"Delete an API key for the user","operationId":"delete_user_api_key_user_api_keys__key_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"integer","title":"Key Id"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteApiKeyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/user/api-keys/usage":{"get":{"tags":["authentication"],"summary":"Get User Api Key Usage","description":"Get usage statistics for all API keys of the user","operationId":"get_user_api_key_usage_user_api_keys_usage_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/create":{"post":{"tags":["authentication"],"summary":"Create Api Key","description":"Create an API key for the user after dashboard login","operationId":"create_api_key_create_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserRegistrationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserRegistrationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/add_credits":{"post":{"tags":["admin"],"summary":"Admin Add Credits","operationId":"admin_add_credits_admin_add_credits_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddCreditsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/balance":{"get":{"tags":["admin"],"summary":"Admin Get All Balances","operationId":"admin_get_all_balances_admin_balance_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/monitor":{"get":{"tags":["admin"],"summary":"Admin Monitor","operationId":"admin_monitor_admin_monitor_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/limit":{"post":{"tags":["admin"],"summary":"Admin Set Rate Limit","operationId":"admin_set_rate_limit_admin_limit_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetRateLimitRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/refresh-providers":{"post":{"tags":["admin"],"summary":"Admin Refresh Providers","operationId":"admin_refresh_providers_admin_refresh_providers_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/cache-status":{"get":{"tags":["admin"],"summary":"Admin Cache Status","operationId":"admin_cache_status_admin_cache_status_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/huggingface-cache-status":{"get":{"tags":["admin"],"summary":"Admin Huggingface Cache Status","description":"Get Hugging Face cache status and statistics","operationId":"admin_huggingface_cache_status_admin_huggingface_cache_status_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/refresh-huggingface-cache":{"post":{"tags":["admin"],"summary":"Admin Refresh Huggingface Cache","description":"Clear Hugging Face cache to force refresh on the next request","operationId":"admin_refresh_huggingface_cache_admin_refresh_huggingface_cache_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/test-huggingface/{hugging_face_id}":{"get":{"tags":["admin"],"summary":"Admin Test Huggingface","description":"Test Hugging Face API response for debugging","operationId":"admin_test_huggingface_admin_test_huggingface__hugging_face_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hugging_face_id","in":"path","required":true,"schema":{"type":"string","title":"Hugging Face Id"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/debug-models":{"get":{"tags":["admin"],"summary":"Admin Debug Models","description":"Debug models and providers data for troubleshooting","operationId":"admin_debug_models_admin_debug_models_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/clear-rate-limit-cache":{"post":{"tags":["admin"],"summary":"Admin Clear Rate Limit Cache","description":"Clear rate limit configuration cache to force reload from database","operationId":"admin_clear_rate_limit_cache_admin_clear_rate_limit_cache_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/trial/analytics":{"get":{"tags":["admin"],"summary":"Get Trial Analytics Admin","description":"Get trial analytics and conversion metrics for admin","operationId":"get_trial_analytics_admin_admin_trial_analytics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/growth":{"get":{"tags":["admin"],"summary":"Get User Growth","description":"Get user growth data over time (Admin only)\n\n**Purpose**: Provide timeseries data for user growth charts\n**Performance**: Optimized for chart rendering, not full user export\n**Returns**: Daily cumulative user counts over specified period\n\n**Parameters**:\n- `days`: Number of days to analyze (1-365, default: 30)\n\n**Response**:\n- Daily data points with cumulative user counts\n- Growth rate calculation\n- Total users at end of period","operationId":"get_user_growth_admin_users_growth_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"Number of days to analyze (1-365)","default":30,"title":"Days"},"description":"Number of days to analyze (1-365)"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/count":{"get":{"tags":["admin"],"summary":"Get Users Count","description":"Get total user count (Admin only)\n\n**ULTRA FAST** - Returns only the total count of all users in the system.\nPerfect for simple metrics and dashboard counters.\n\n**Response**:\n- `count`: Total number of users in the database\n\n**Performance**: ~5-20ms (pure COUNT query)","operationId":"get_users_count_admin_users_count_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/stats":{"get":{"tags":["admin"],"summary":"Get Users Stats","description":"Get user statistics without fetching user data (Admin only)\n\n**FAST & LIGHTWEIGHT** - Returns only counts and statistics, no user data.\nPerfect for dashboard cards and stats widgets.\n\n**Filters** (optional):\n- `email`: Filter stats by email pattern\n- `api_key`: Filter stats by API key pattern\n- `is_active`: Filter stats by active status\n\n**Response**:\n- Total user counts (filtered)\n- Active/Inactive breakdown\n- Role distribution\n- Credit statistics\n- Subscription breakdown\n\n**Performance**: ~10-50ms (vs 500ms+ for full user list)","operationId":"get_users_stats_admin_users_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by email (case-insensitive partial match)","title":"Email"},"description":"Filter by email (case-insensitive partial match)"},{"name":"api_key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by API key (case-insensitive partial match)","title":"Api Key"},"description":"Filter by API key (case-insensitive partial match)"},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by active status (true/false)","title":"Is Active"},"description":"Filter by active status (true/false)"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users":{"get":{"tags":["admin"],"summary":"Get All Users Info","description":"Get users information with search and pagination (Admin only)\n\n**OPTIMIZED FOR LARGE DATASETS** - This endpoint only fetches users, no statistics.\nUse `/admin/users/stats` for statistics if needed.\n\n**Search Parameters**:\n- `email`: Case-insensitive partial match (e.g., \"john\" matches \"john@example.com\")\n- `api_key`: Case-insensitive partial match (e.g., \"gw_live\" matches keys starting with \"gw_live\")\n- `is_active`: Filter by active status (true = active only, false = inactive only, null = all)\n\n**Pagination**:\n- `limit`: Records per page (1-10000, default: 100)\n- `offset`: Records to skip (default: 0)\n\n**Response**:\n- `total_users`: Total matching the filters (not total in database)\n- `has_more`: Whether more results exist beyond current page\n- `users`: Current page of filtered users\n- `pagination`: Pagination metadata\n- `filters_applied`: Applied filters\n\n**Note**: Statistics are NOT included. Use `/admin/users/stats` for statistics.","operationId":"get_all_users_info_admin_users_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by email (case-insensitive partial match)","title":"Email"},"description":"Filter by email (case-insensitive partial match)"},{"name":"api_key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by API key (case-insensitive partial match)","title":"Api Key"},"description":"Filter by API key (case-insensitive partial match)"},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by active status (true/false)","title":"Is Active"},"description":"Filter by active status (true/false)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Maximum number of users to return (increased to 10000)","default":100,"title":"Limit"},"description":"Maximum number of users to return (increased to 10000)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of users to skip (pagination)","default":0,"title":"Offset"},"description":"Number of users to skip (pagination)"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/credit-transactions":{"get":{"tags":["admin"],"summary":"Get All Credit Transactions Admin","description":"Get all credit transactions across all users (Admin only)\n\nThis endpoint allows admins to view all credit transactions in the system with the same\nadvanced filtering capabilities as the user endpoint.\n\n**Differences from user endpoint:**\n- Views ALL users' transactions (unless filtered by user_id)\n- Requires admin authentication\n- Optional user_id filter to view specific user's transactions\n\n**Filters:**\n- `user_id`: Filter by specific user (optional, if not provided shows all users)\n- `transaction_type`: Filter by type (trial, purchase, api_usage, etc.)\n- `from_date` / `to_date`: Date range filtering (YYYY-MM-DD format)\n- `min_amount` / `max_amount`: Amount range filtering\n- `direction`: 'credit' (additions) or 'charge' (deductions)\n- `payment_id`: Filter by specific payment\n- `sort_by`: Sort by date, amount, or type\n- `sort_order`: 'asc' or 'desc'\n\n**Response includes:**\n- Filtered transactions list (with user_id included)\n- Summary analytics (if include_summary=true)","operationId":"get_all_credit_transactions_admin_admin_credit_transactions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Maximum number of transactions to return","default":50,"title":"Limit"},"description":"Maximum number of transactions to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of transactions to skip","default":0,"title":"Offset"},"description":"Number of transactions to skip"},{"name":"user_id","in":"query","required":false,"schema":{"type":"integer","description":"Filter by specific user ID","title":"User Id"},"description":"Filter by specific user ID"},{"name":"transaction_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by transaction type (trial, purchase, api_usage, admin_credit, admin_debit, refund, bonus, transfer)","title":"Transaction Type"},"description":"Filter by transaction type (trial, purchase, api_usage, admin_credit, admin_debit, refund, bonus, transfer)"},{"name":"from_date","in":"query","required":false,"schema":{"type":"string","description":"Start date filter (YYYY-MM-DD or ISO format)","title":"From Date"},"description":"Start date filter (YYYY-MM-DD or ISO format)"},{"name":"to_date","in":"query","required":false,"schema":{"type":"string","description":"End date filter (YYYY-MM-DD or ISO format)","title":"To Date"},"description":"End date filter (YYYY-MM-DD or ISO format)"},{"name":"min_amount","in":"query","required":false,"schema":{"type":"number","description":"Minimum transaction amount (absolute value)","title":"Min Amount"},"description":"Minimum transaction amount (absolute value)"},{"name":"max_amount","in":"query","required":false,"schema":{"type":"number","description":"Maximum transaction amount (absolute value)","title":"Max Amount"},"description":"Maximum transaction amount (absolute value)"},{"name":"direction","in":"query","required":false,"schema":{"type":"string","description":"Filter by direction: 'credit' (positive amounts) or 'charge' (negative amounts)","title":"Direction"},"description":"Filter by direction: 'credit' (positive amounts) or 'charge' (negative amounts)"},{"name":"payment_id","in":"query","required":false,"schema":{"type":"integer","description":"Filter by payment ID","title":"Payment Id"},"description":"Filter by payment ID"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort field: 'created_at', 'amount', or 'transaction_type'","default":"created_at","title":"Sort By"},"description":"Sort field: 'created_at', 'amount', or 'transaction_type'"},{"name":"sort_order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: 'asc' or 'desc'","default":"desc","title":"Sort Order"},"description":"Sort order: 'asc' or 'desc'"},{"name":"include_summary","in":"query","required":false,"schema":{"type":"boolean","description":"Include summary analytics in response","default":false,"title":"Include Summary"},"description":"Include summary analytics in response"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/by-api-key":{"get":{"tags":["admin"],"summary":"Get User By Api Key","description":"Get user information by exact API key match (Admin only)\n\n**FAST EXACT MATCH** - Looks up which user owns a specific API key.\nDoes NOT support partial matching - you must provide the complete API key.\n\n**Parameters**:\n- `api_key`: Complete API key (e.g., \"gw_live_abc123...\")\n\n**Response**:\n- User information only (id, username, email, credits, status, etc.)\n- 404 if API key doesn't exist\n\n**Performance**: ~10-20ms (indexed lookup)\n\n**Example**:\n```\nGET /admin/users/by-api-key?api_key=gw_live_abc123xyz\n```\n\n**Response format**:\n```json\n{\n  \"status\": \"success\",\n  \"user\": {\n    \"id\": 123,\n    \"username\": \"john_doe\",\n    \"email\": \"john@example.com\",\n    \"credits\": 50.0,\n    \"is_active\": true,\n    \"role\": \"user\",\n    \"subscription_status\": \"active\",\n    \"created_at\": \"2025-01-01T00:00:00Z\"\n  },\n  \"timestamp\": \"2026-01-05T10:30:00Z\"\n}\n```","operationId":"get_user_by_api_key_admin_users_by_api_key_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_key","in":"query","required":true,"schema":{"type":"string","description":"Full API key (exact match required)","title":"Api Key"},"description":"Full API key (exact match required)"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/api-keys/{api_key_id}":{"get":{"tags":["admin","api-keys"],"summary":"Get Api Key Details By Id","description":"Get complete API key details by ID including user information (Admin only).\n\nThis endpoint returns comprehensive information about an API key:\n- Full API key details (including the actual key string)\n- User information (email, name, username)\n- Key metadata (name, environment, permissions, limits)\n- Usage statistics\n\n**Parameters**:\n- `api_key_id`: The numeric ID of the API key\n\n**Response**:\n- Complete API key details with nested user information\n- 404 if API key ID doesn't exist\n\n**Security**: Admin-only endpoint - handles sensitive data\n\n**Example**:\n```\nGET /admin/api-keys/123\n```\n\n**Response format**:\n```json\n{\n  \"status\": \"success\",\n  \"api_key\": {\n    \"id\": 123,\n    \"api_key\": \"gw_live_abc123xyz...\",\n    \"key_name\": \"Production Key\",\n    \"environment_tag\": \"live\",\n    \"is_active\": true,\n    \"is_primary\": false,\n    \"scope_permissions\": {\"read\": [\"*\"], \"write\": [\"*\"]},\n    \"max_requests\": 10000,\n    \"requests_used\": 523,\n    \"ip_allowlist\": [],\n    \"domain_referrers\": [],\n    \"created_at\": \"2025-01-01T00:00:00Z\",\n    \"updated_at\": \"2025-01-05T12:00:00Z\",\n    \"last_used_at\": \"2025-01-06T08:30:00Z\",\n    \"expiration_date\": null,\n    \"user\": {\n      \"id\": 456,\n      \"email\": \"user@example.com\",\n      \"username\": \"john_doe\",\n      \"credits\": 50.0,\n      \"is_active\": true,\n      \"role\": \"user\",\n      \"subscription_status\": \"active\",\n      \"created_at\": \"2024-12-01T00:00:00Z\"\n    }\n  },\n  \"timestamp\": \"2026-01-06T10:00:00Z\"\n}\n```","operationId":"get_api_key_details_by_id_admin_api_keys__api_key_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"integer","title":"Api Key Id"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{user_id}":{"get":{"tags":["admin"],"summary":"Get User Info By Id","description":"Get detailed information for a specific user (Admin only)","operationId":"get_user_info_by_id_admin_users__user_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/by-domain/{domain}":{"delete":{"tags":["admin"],"summary":"Delete Users By Domain","description":"Delete all users with emails from a specific domain (Admin only)\n\n**Purpose**: Remove accounts created from abusive or blocked email domains\n\n**Parameters**:\n- `domain`: Email domain to match (e.g., \"spam-domain.org\")\n- `dry_run`: If true (default), only shows users that would be deleted without deleting\n\n**Response**:\n- List of affected user IDs and emails\n- Count of users deleted (or would be deleted in dry_run mode)\n\n**Safety**:\n- Requires admin authentication\n- dry_run=true by default to prevent accidental deletion\n- Logs all deletions for audit trail","operationId":"delete_users_by_domain_admin_users_by_domain__domain__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","title":"Domain"}},{"name":"dry_run","in":"query","required":false,"schema":{"type":"boolean","description":"If true, only list users that would be deleted without actually deleting","default":true,"title":"Dry Run"},"description":"If true, only list users that would be deleted without actually deleting"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/monitoring/chat-requests/by-api-key":{"get":{"tags":["admin","monitoring"],"summary":"Get Chat Completion Requests By Api Key Admin","description":"Get paginated chat completion requests for a specific API key (Admin only).\n\n**OPTIMIZED FOR PAGINATION** - Fast data fetching without summary overhead.\n\n**RECOMMENDED USAGE:**\n- Use THIS endpoint for browsing/paginating through requests\n- Use `/admin/monitoring/chat-requests/by-api-key/summary` for statistics\n\n**This endpoint allows administrators to:**\n- Browse all chat completion requests made with a specific API key\n- View detailed request information (tokens, timing, models, users)\n- Paginate through large result sets efficiently\n- Monitor API key activity and usage patterns\n\n**Query Parameters:**\n- `api_key`: Full API key string (exact match required) - e.g., \"gw_live_abc123...\"\n- `limit`: Maximum number of requests to return (1-1000, default: 100)\n- `offset`: Number of requests to skip for pagination (default: 0)\n- `include_summary`: ⚠️ DEPRECATED - Include summary statistics (use /summary endpoint instead)\n\n**Pagination Example:**\n```\n# First 100 requests\nGET /admin/monitoring/chat-requests/by-api-key?api_key=gw_live_xxx&limit=100&offset=0\n\n# Next 100 requests (101-200)\nGET /admin/monitoring/chat-requests/by-api-key?api_key=gw_live_xxx&limit=100&offset=100\n\n# Next 100 requests (201-300)\nGET /admin/monitoring/chat-requests/by-api-key?api_key=gw_live_xxx&limit=100&offset=200\n```\n\n**For Summary Statistics:**\n```\nGET /admin/monitoring/chat-requests/by-api-key/summary?api_key=gw_live_xxx\n```\n\n**Returns:**\n- `requests`: List of chat completion requests with model and user details\n- `total_count`: Total number of requests for this API key\n- `api_key_info`: Information about the API key\n- `pagination`: Pagination metadata\n- `summary`: (Optional, deprecated) Only included if include_summary=true\n- `api_key_info`: Information about the API key (id, name, user_id, etc.)\n- `pagination`: Pagination metadata (limit, offset, has_more, current_page, total_pages)\n\n**Response Format:**\n```json\n{\n  \"requests\": [...],\n  \"total_count\": 523,\n  \"summary\": {\n    \"total_requests\": 523,\n    \"total_input_tokens\": 125000,\n    \"total_output_tokens\": 85000,\n    \"total_tokens\": 210000,\n    \"avg_processing_time_ms\": 1250.5,\n    \"completed_requests\": 520,\n    \"failed_requests\": 3\n  },\n  \"api_key_info\": {...},\n  \"limit\": 100,\n  \"offset\": 0,\n  \"pagination\": {\n    \"limit\": 100,\n    \"offset\": 0,\n    \"has_more\": true,\n    \"current_page\": 1,\n    \"total_pages\": 6\n  }\n}\n```","operationId":"get_chat_completion_requests_by_api_key_admin_admin_monitoring_chat_requests_by_api_key_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_key","in":"query","required":true,"schema":{"type":"string","description":"API key to search for (exact match)","title":"Api Key"},"description":"API key to search for (exact match)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Maximum number of requests to return","default":100,"title":"Limit"},"description":"Maximum number of requests to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of requests to skip for pagination","default":0,"title":"Offset"},"description":"Number of requests to skip for pagination"},{"name":"include_summary","in":"query","required":false,"schema":{"type":"boolean","description":"Include summary statistics (DEPRECATED - use /summary endpoint)","default":false,"title":"Include Summary"},"description":"Include summary statistics (DEPRECATED - use /summary endpoint)"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/monitoring/chat-requests/providers":{"get":{"tags":["admin","monitoring"],"summary":"Get Providers With Requests Admin","description":"Get all providers that have models with chat completion requests (Admin only).\n\nReturns a list of providers that have at least one model with chat completion requests.\nUseful for building provider selection UI and analytics dashboards.\n\nReturns:\n- Provider information (id, name, slug)\n- Count of models with requests\n- Total requests across all models","operationId":"get_providers_with_requests_admin_admin_monitoring_chat_requests_providers_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/monitoring/chat-requests/counts":{"get":{"tags":["admin","monitoring"],"summary":"Get Request Counts By Model Admin","description":"Get request counts for each model - lightweight endpoint (Admin only).\n\nReturns simple counts of requests per model, sorted by count (descending).\nThis is lighter than /models when you only need counts.","operationId":"get_request_counts_by_model_admin_admin_monitoring_chat_requests_counts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/monitoring/chat-requests/models":{"get":{"tags":["admin","monitoring"],"summary":"Get Models With Requests Admin","description":"Get all unique models that have chat completion requests (Admin only).\n\nReturns models with request statistics including token usage and performance metrics.\nOptionally filter by provider_id.","operationId":"get_models_with_requests_admin_admin_monitoring_chat_requests_models_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by provider ID","title":"Provider Id"},"description":"Filter by provider ID"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/monitoring/chat-requests":{"get":{"tags":["admin","monitoring"],"summary":"Get Chat Completion Requests Admin","description":"Get chat completion requests with flexible filtering (Admin only).\n\nAllows fetching chat completion data for analytics with multiple filter options.\nReturns full request details including model, provider, tokens, and performance metrics.","operationId":"get_chat_completion_requests_admin_admin_monitoring_chat_requests_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by model ID","title":"Model Id"},"description":"Filter by model ID"},{"name":"provider_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by provider ID","title":"Provider Id"},"description":"Filter by provider ID"},{"name":"model_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by model name (contains)","title":"Model Name"},"description":"Filter by model name (contains)"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by start date (ISO format)","title":"Start Date"},"description":"Filter by start date (ISO format)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by end date (ISO format)","title":"End Date"},"description":"Filter by end date (ISO format)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100000,"minimum":1,"description":"Maximum records to return","default":100,"title":"Limit"},"description":"Maximum records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination offset","default":0,"title":"Offset"},"description":"Pagination offset"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/monitoring/chat-requests/summary":{"get":{"tags":["admin","monitoring"],"summary":"Get Chat Requests Summary Admin","description":"Get aggregated summary statistics for chat completion requests (Admin only).\n\n**PURPOSE**: Analytics dashboard - shows aggregate metrics without fetching data.\n\n**OPTIMIZED**: Uses database-side aggregation with no data fetching required.\n\n**CACHED**: Results cached for 60 seconds in Redis for high performance.\n\n**Query Parameters:**\n- `model_id`: Filter by specific model ID\n- `provider_id`: Filter by provider ID\n- `model_name`: Filter by model name (partial match)\n- `start_date`: Filter by start date (ISO format: YYYY-MM-DDTHH:MM:SS)\n- `end_date`: Filter by end date (ISO format: YYYY-MM-DDTHH:MM:SS)\n\n**Returns:**\n```json\n{\n  \"summary\": {\n    \"total_requests\": 50000,\n    \"total_input_tokens\": 125000000,\n    \"total_output_tokens\": 85000000,\n    \"total_tokens\": 210000000,\n    \"avg_input_tokens\": 2500.0,\n    \"avg_output_tokens\": 1700.0,\n    \"avg_processing_time_ms\": 1250.5,\n    \"completed_requests\": 49800,\n    \"failed_requests\": 200,\n    \"success_rate\": 99.6,\n    \"first_request_at\": \"2025-01-01T00:00:00Z\",\n    \"last_request_at\": \"2026-01-19T10:30:00Z\",\n    \"total_cost_usd\": 42.50\n  },\n  \"filters\": {\n    \"model_id\": 4,\n    \"provider_id\": null,\n    \"model_name\": null,\n    \"start_date\": \"2026-01-12T00:00:00Z\",\n    \"end_date\": \"2026-01-19T00:00:00Z\"\n  },\n  \"timestamp\": \"2026-01-19T13:00:00Z\",\n  \"cached\": false\n}\n```\n\n**Performance:**\n- With database RPC: 30-50ms\n- With cache hit: 5-10ms\n\n**For browsing requests, use:** `/admin/monitoring/chat-requests?model_id=4&...`","operationId":"get_chat_requests_summary_admin_admin_monitoring_chat_requests_summary_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by model ID","title":"Model Id"},"description":"Filter by model ID"},{"name":"provider_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by provider ID","title":"Provider Id"},"description":"Filter by provider ID"},{"name":"model_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by model name (contains)","title":"Model Name"},"description":"Filter by model name (contains)"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by start date (ISO format)","title":"Start Date"},"description":"Filter by start date (ISO format)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by end date (ISO format)","title":"End Date"},"description":"Filter by end date (ISO format)"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/monitoring/chat-requests/plot-data":{"get":{"tags":["admin","monitoring"],"summary":"Get Chat Requests Plot Data Admin","description":"Get optimized chat completion request data for plotting graphs (Admin only).\n\nReturns:\n- recent_requests: Last 10 full requests for display\n- plot_data: ALL requests in compressed array format (tokens, latency, timestamps)\n\nHighly optimized for frontend plotting with minimal data transfer.","operationId":"get_chat_requests_plot_data_admin_admin_monitoring_chat_requests_plot_data_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by model ID","title":"Model Id"},"description":"Filter by model ID"},{"name":"provider_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by provider ID","title":"Provider Id"},"description":"Filter by provider ID"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by start date (ISO format)","title":"Start Date"},"description":"Filter by start date (ISO format)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by end date (ISO format)","title":"End Date"},"description":"Filter by end date (ISO format)"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/model-usage-analytics":{"get":{"tags":["admin"],"summary":"Get Model Usage Analytics","description":"Admin endpoint to get model usage analytics with pagination and search.\n\nReturns data from the model_usage_analytics view including:\n- Model identification (name, provider, etc.)\n- Request counts\n- Token usage (input/output totals and averages)\n- Pricing per token\n- Cost calculations (total, input, output, per-request average)\n- Performance metrics\n- Model metadata\n\nSupports:\n- Pagination: ?page=1&limit=50\n- Search: ?model_name=gpt (partial match, case-insensitive)\n- Sorting: ?sort_by=total_cost_usd&sort_order=desc","operationId":"get_model_usage_analytics_admin_model_usage_analytics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number (starts at 1)","default":1,"title":"Page"},"description":"Page number (starts at 1)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Items per page (max 500)","default":50,"title":"Limit"},"description":"Items per page (max 500)"},{"name":"model_name","in":"query","required":false,"schema":{"type":"string","description":"Search by model name (partial match)","title":"Model Name"},"description":"Search by model name (partial match)"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort by field (total_cost_usd, successful_requests, etc.)","default":"total_cost_usd","title":"Sort By"},"description":"Sort by field (total_cost_usd, successful_requests, etc.)"},{"name":"sort_order","in":"query","required":false,"schema":{"type":"string","description":"Sort order (asc or desc)","default":"desc","title":"Sort Order"},"description":"Sort order (asc or desc)"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricing-audit":{"get":{"tags":["admin"],"summary":"Run Pricing Audit","description":"Run a pricing audit comparing live provider catalogs against database pricing.\n\nReturns a report grouped by gateway/provider with:\n- Summary stats (total models, mismatches, missing)\n- Per-gateway breakdown with individual model mismatches\n- Pricing shown in both per-token and per-million-token formats\n\nRequires admin authentication.","operationId":"run_pricing_audit_admin_pricing_audit_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"gateway","in":"query","required":false,"schema":{"type":"string","description":"Specific gateway(s) to audit, comma-separated (e.g. 'openrouter,deepinfra'). Omit to audit all.","title":"Gateway"},"description":"Specific gateway(s) to audit, comma-separated (e.g. 'openrouter,deepinfra'). Omit to audit all."},{"name":"threshold","in":"query","required":false,"schema":{"type":"number","maximum":100.0,"minimum":0.0,"description":"Minimum percentage difference to flag as a mismatch (default: 0% = exact match)","default":0.0,"title":"Threshold"},"description":"Minimum percentage difference to flag as a mismatch (default: 0% = exact match)"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/live-test/run":{"post":{"tags":["admin","live-test"],"summary":"Run Live Model Test","description":"Run a live inference test against all (or filtered) catalog models.\n\nSends a minimal 5-token chat completion to each model through the gateway,\nusing the admin user's API key. Returns per-provider stats and failure details.\n\n**Warning**: This makes real inference calls. With 1000+ models at concurrency=5,\nexpect ~10-30 minutes and a small credit cost (~$0.01-0.05).","operationId":"run_live_model_test_admin_live_test_run_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"gateway","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by gateway","title":"Gateway"},"description":"Filter by gateway"},{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by provider slug","title":"Provider"},"description":"Filter by provider slug"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":0,"description":"Max models to test (default 50, max 5000)","default":50,"title":"Limit"},"description":"Max models to test (default 50, max 5000)"},{"name":"concurrency","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"description":"Parallel requests","default":10,"title":"Concurrency"},"description":"Parallel requests"},{"name":"timeout","in":"query","required":false,"schema":{"type":"number","maximum":120,"minimum":5,"description":"Per-model timeout (s)","default":60.0,"title":"Timeout"},"description":"Per-model timeout (s)"},{"name":"skip_unhealthy","in":"query","required":false,"schema":{"type":"boolean","description":"Skip models with health_status=down","default":true,"title":"Skip Unhealthy"},"description":"Skip models with health_status=down"},{"name":"persist","in":"query","required":false,"schema":{"type":"boolean","description":"Persist FRESH per-model health verdicts from this sweep. When true, records precise call outcomes and marks consistently hard-failing (dead/404/5xx) models 'down'. 429/timeout/auth never hide a model. Default false (existing behavior unchanged).","default":false,"title":"Persist"},"description":"Persist FRESH per-model health verdicts from this sweep. When true, records precise call outcomes and marks consistently hard-failing (dead/404/5xx) models 'down'. 429/timeout/auth never hide a model. Default false (existing behavior unchanged)."},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LiveTestReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/live-test/status":{"get":{"tags":["admin","live-test"],"summary":"Get Live Test Status","description":"Check if the live test endpoint is available.","operationId":"get_live_test_status_admin_live_test_status_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Live Test Status Admin Live Test Status Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/monitoring/api-key-tracking-quality":{"get":{"tags":["Admin","Monitoring"],"summary":"Get Api Key Tracking Quality","description":"Get API key tracking quality metrics.\n\nProvides insights into how well we're tracking API keys in chat completion requests,\nincluding percentage of NULL api_key_id values and breakdown by scenario.\n\n**Admin authentication required.**\n\nArgs:\n    hours: Time window to analyze (1-168 hours, default: 24)\n\nReturns:\n    Dictionary containing:\n    - total_requests: Total chat completion requests in time window\n    - requests_with_api_key: Requests with valid api_key_id\n    - requests_without_api_key: Requests with NULL api_key_id\n    - tracking_rate: Percentage of requests with api_key_id (0-100)\n    - breakdown: Detailed breakdown by user_id presence\n    - time_window: Analysis time window info\n    - alert_status: Health status (ok, warning, critical)\n    - recommendations: List of actionable recommendations","operationId":"get_api_key_tracking_quality_admin_monitoring_api_key_tracking_quality_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":168,"minimum":1,"description":"Time window in hours (default: 24)","default":24,"title":"Hours"},"description":"Time window in hours (default: 24)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Api Key Tracking Quality Admin Monitoring Api Key Tracking Quality Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/monitoring/api-key-tracking-trend":{"get":{"tags":["Admin","Monitoring"],"summary":"Get Api Key Tracking Trend","description":"Get API key tracking quality trend over time.\n\nProvides daily breakdown of tracking quality to identify trends and patterns.\n\n**Admin authentication required.**\n\nArgs:\n    days: Number of days to analyze (1-30, default: 7)\n\nReturns:\n    Dictionary containing:\n    - trend_data: List of daily metrics\n    - summary: Overall statistics for the period","operationId":"get_api_key_tracking_trend_admin_monitoring_api_key_tracking_trend_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":30,"minimum":1,"description":"Number of days to analyze (default: 7)","default":7,"title":"Days"},"description":"Number of days to analyze (default: 7)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Api Key Tracking Trend Admin Monitoring Api Key Tracking Trend Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/credits/add":{"post":{"tags":["credits","admin"],"summary":"Add Credits Endpoint","description":"Add credits to a user account.\n\nThis endpoint adds a positive amount of credits to a user's account.\nOnly accessible by admin users.\n\n**Request:**\n- `user_id`: Target user ID\n- `amount`: Amount of credits to add (must be positive)\n- `description`: Optional description for the transaction\n- `metadata`: Optional additional metadata\n\n**Response:**\n- User's previous and new balance\n- Transaction details","operationId":"add_credits_endpoint_credits_add_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditAddRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/credits/adjust":{"post":{"tags":["credits","admin"],"summary":"Adjust Credits Endpoint","description":"Adjust credits for a user account (add or remove).\n\nThis endpoint allows adding or removing credits from a user's account.\nUse positive amounts to add credits, negative amounts to remove.\nOnly accessible by admin users.\n\n**Request:**\n- `user_id`: Target user ID\n- `amount`: Amount to adjust (positive to add, negative to remove)\n- `description`: Optional description for the transaction\n- `reason`: Required reason for the adjustment (min 10 characters)\n- `metadata`: Optional additional metadata\n\n**Response:**\n- User's previous and new balance\n- Transaction details","operationId":"adjust_credits_endpoint_credits_adjust_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditAdjustRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/credits/bulk-add":{"post":{"tags":["credits","admin"],"summary":"Bulk Add Credits Endpoint","description":"Add credits to multiple users at once.\n\nThis endpoint adds a specified amount of credits to multiple users.\nOnly accessible by admin users.\n\n**Request:**\n- `user_ids`: List of user IDs to add credits to (max 100)\n- `amount`: Amount of credits to add to each user\n- `reason`: Required reason for the bulk credit grant (min 10 characters)\n- `description`: Optional description for the transactions\n- `metadata`: Optional additional metadata\n\n**Response:**\n- Summary of successful and failed operations\n- Details for each user","operationId":"bulk_add_credits_endpoint_credits_bulk_add_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkCreditAddRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkCreditResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/credits/refund":{"post":{"tags":["credits","admin"],"summary":"Refund Credits Endpoint","description":"Refund credits to a user account.\n\nThis endpoint refunds credits to a user's account, typically used for\nreversing charges or compensating users.\nOnly accessible by admin users.\n\n**Request:**\n- `user_id`: Target user ID\n- `amount`: Amount of credits to refund (must be positive)\n- `original_transaction_id`: Optional ID of original transaction being refunded\n- `reason`: Reason for the refund\n- `metadata`: Optional additional metadata\n\n**Response:**\n- User's previous and new balance\n- Transaction details","operationId":"refund_credits_endpoint_credits_refund_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditRefundRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/credits/summary":{"get":{"tags":["credits","admin"],"summary":"Get Credits Summary Endpoint","description":"Get credit summary and analytics.\n\nThis endpoint provides a comprehensive summary of credit transactions,\nincluding totals, breakdowns by type, and daily statistics.\n\n**Query Parameters:**\n- `user_id`: Optional filter by specific user\n- `from_date`: Start date filter (YYYY-MM-DD)\n- `to_date`: End date filter (YYYY-MM-DD)\n\n**Response:**\n- Total credits added and used\n- Breakdown by transaction type\n- Daily breakdown\n- System-wide statistics (if no user_id specified)","operationId":"get_credits_summary_endpoint_credits_summary_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by user ID (optional)","title":"User Id"},"description":"Filter by user ID (optional)"},{"name":"from_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"From Date"},"description":"Start date (YYYY-MM-DD)"},{"name":"to_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"To Date"},"description":"End date (YYYY-MM-DD)"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Credits Summary Endpoint Credits Summary Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/credits/transactions":{"get":{"tags":["credits","admin"],"summary":"Get Credits Transactions Endpoint","description":"Get credit transactions with advanced filtering.\n\nThis endpoint provides access to all credit transactions with comprehensive\nfiltering and pagination options.\n\n**Query Parameters:**\n- `limit`: Maximum transactions to return (1-1000)\n- `offset`: Number to skip for pagination\n- `user_id`: Filter by user\n- `transaction_type`: Filter by type\n- `from_date` / `to_date`: Date range\n- `min_amount` / `max_amount`: Amount range\n- `direction`: 'credit' or 'charge'\n- `sort_by`: Sort field\n- `sort_order`: 'asc' or 'desc'\n\n**Response:**\n- List of transactions\n- Pagination info\n- Applied filters","operationId":"get_credits_transactions_endpoint_credits_transactions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Maximum number of transactions to return","default":50,"title":"Limit"},"description":"Maximum number of transactions to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of transactions to skip","default":0,"title":"Offset"},"description":"Number of transactions to skip"},{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by specific user ID","title":"User Id"},"description":"Filter by specific user ID"},{"name":"transaction_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by transaction type (trial, purchase, api_usage, admin_credit, admin_debit, refund, bonus, transfer)","title":"Transaction Type"},"description":"Filter by transaction type (trial, purchase, api_usage, admin_credit, admin_debit, refund, bonus, transfer)"},{"name":"from_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date filter (YYYY-MM-DD or ISO format)","title":"From Date"},"description":"Start date filter (YYYY-MM-DD or ISO format)"},{"name":"to_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date filter (YYYY-MM-DD or ISO format)","title":"To Date"},"description":"End date filter (YYYY-MM-DD or ISO format)"},{"name":"min_amount","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum transaction amount (absolute value)","title":"Min Amount"},"description":"Minimum transaction amount (absolute value)"},{"name":"max_amount","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum transaction amount (absolute value)","title":"Max Amount"},"description":"Maximum transaction amount (absolute value)"},{"name":"direction","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by direction: 'credit' (positive amounts) or 'charge' (negative amounts)","title":"Direction"},"description":"Filter by direction: 'credit' (positive amounts) or 'charge' (negative amounts)"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort field: 'created_at', 'amount', or 'transaction_type'","default":"created_at","title":"Sort By"},"description":"Sort field: 'created_at', 'amount', or 'transaction_type'"},{"name":"sort_order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: 'asc' or 'desc'","default":"desc","title":"Sort Order"},"description":"Sort order: 'asc' or 'desc'"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Credits Transactions Endpoint Credits Transactions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/user/api-keys/audit-logs":{"get":{"tags":["authentication"],"summary":"Get User Audit Logs","description":"Get audit logs for the user's API keys (Phase 4 feature)","operationId":"get_user_audit_logs_user_api_keys_audit_logs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Key Id"}},{"name":"action","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/user/notifications/preferences":{"get":{"tags":["notifications"],"summary":"Get Notification Preferences","description":"Get user notification preferences","operationId":"get_notification_preferences_user_notifications_preferences_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationPreferences"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["notifications"],"summary":"Update Notification Preferences","description":"Update user notification preferences","operationId":"update_notification_preferences_user_notifications_preferences_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateNotificationPreferencesRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/user/notifications/test":{"post":{"tags":["notifications"],"summary":"Test Notification","description":"Send test notification to a user","operationId":"test_notification_user_notifications_test_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"notification_type","in":"query","required":true,"schema":{"$ref":"#/components/schemas/NotificationType","description":"Type of notification to test"},"description":"Type of notification to test"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/user/notifications/send-usage-report":{"post":{"tags":["notifications"],"summary":"Send Usage Report","description":"Send monthly usage report email","operationId":"send_usage_report_user_notifications_send_usage_report_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"month","in":"query","required":true,"schema":{"type":"string","description":"Month to send report for (YYYY-MM)","title":"Month"},"description":"Month to send report for (YYYY-MM)"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/notifications/stats":{"get":{"tags":["admin"],"summary":"Get Notification Stats","description":"Get notification statistics for admin","operationId":"get_notification_stats_admin_notifications_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationStats"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/notifications/process":{"post":{"tags":["admin"],"summary":"Process Notifications","description":"Process all pending notifications (admin only)","operationId":"process_notifications_admin_notifications_process_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/plans":{"get":{"tags":["plans"],"summary":"Get Plans","description":"Get all available subscription plans","operationId":"get_plans_plans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PlanResponse"},"type":"array","title":"Response Get Plans Plans Get"}}}}}}},"/plans/{plan_id}":{"get":{"tags":["plans"],"summary":"Get Plan","description":"Get a specific plan by ID","operationId":"get_plan_plans__plan_id__get","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"integer","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/user/plan":{"get":{"tags":["authentication"],"summary":"Get User Plan Endpoint","description":"Get current user's plan","operationId":"get_user_plan_endpoint_user_plan_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPlanResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/user/plan/usage":{"get":{"tags":["authentication"],"summary":"Get User Plan Usage","description":"Get user's plan usage and limits","operationId":"get_user_plan_usage_user_plan_usage_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanUsageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/user/plan/entitlements":{"get":{"tags":["authentication"],"summary":"Get User Plan Entitlements","description":"Check user's plan entitlements","operationId":"get_user_plan_entitlements_user_plan_entitlements_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"feature","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Feature"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanEntitlementsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/assign-plan":{"post":{"tags":["admin"],"summary":"Assign Plan To User","description":"Assign a plan to a user (Admin only)","operationId":"assign_plan_to_user_admin_assign_plan_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignPlanRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/user/environment-usage":{"get":{"tags":["authentication"],"summary":"Get User Environment Usage","description":"Get user's usage breakdown by environment","operationId":"get_user_environment_usage_user_environment_usage_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/trial/status":{"get":{"tags":["trial"],"summary":"Get Trial Status","description":"Get the current trial status for the authenticated API key","operationId":"get_trial_status_trial_status_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/subscription/plans":{"get":{"tags":["subscription"],"summary":"Get Subscription Plans","description":"Get available subscription plans with 4-tier structure","operationId":"get_subscription_plans_subscription_plans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/user/rate-limits":{"get":{"tags":["authentication"],"summary":"Get User Rate Limits Advanced","description":"Get advanced rate limit configuration and status for user's API keys","operationId":"get_user_rate_limits_advanced_user_rate_limits_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/user/rate-limits/{key_id}":{"put":{"tags":["authentication"],"summary":"Update User Rate Limits Advanced","description":"Update rate limit configuration for a specific API key","operationId":"update_user_rate_limits_advanced_user_rate_limits__key_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"integer","title":"Key Id"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Rate Limit Config"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/user/rate-limits/bulk-update":{"post":{"tags":["authentication"],"summary":"Bulk Update User Rate Limits","description":"Bulk update rate limit configuration for all user's API keys","operationId":"bulk_update_user_rate_limits_user_rate_limits_bulk_update_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Rate Limit Config"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/user/rate-limits/usage/{key_id}":{"get":{"tags":["authentication"],"summary":"Get Api Key Rate Limit Usage","description":"Get detailed rate limit usage statistics for a specific API key","operationId":"get_api_key_rate_limit_usage_user_rate_limits_usage__key_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"integer","title":"Key Id"}},{"name":"time_window","in":"query","required":false,"schema":{"type":"string","default":"minute","title":"Time Window"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/rate-limits/system":{"get":{"tags":["admin"],"summary":"Get System Rate Limits","description":"Get system-wide rate limiting statistics","operationId":"get_system_rate_limits_admin_rate_limits_system_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/rate-limits/alerts":{"get":{"tags":["admin"],"summary":"Get Rate Limit Alerts Endpoint","description":"Get rate limit alerts for monitoring","operationId":"get_rate_limit_alerts_endpoint_admin_rate_limits_alerts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}},{"name":"resolved","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Resolved"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/rate-limits/config":{"get":{"tags":["admin"],"summary":"Get Admin Rate Limit Config","description":"Get rate limit configuration.\n\nIf api_key is provided, returns config for that specific key.\nOtherwise, returns the default system configuration.\n\n**Query Parameters:**\n- `api_key`: Optional specific API key to get config for\n\n**Response:**\n- Rate limit configuration\n- Default values if no custom config exists","operationId":"get_admin_rate_limit_config_admin_rate_limits_config_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional API key to get config for","title":"Api Key"},"description":"Optional API key to get config for"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Admin Rate Limit Config Admin Rate Limits Config Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["admin"],"summary":"Set Admin Rate Limit Config","description":"Set rate limit configuration for a specific API key.\n\n**Request:**\n- `api_key`: Target API key\n- `config`: Rate limit configuration object\n\n**Response:**\n- Updated configuration\n- Success status","operationId":"set_admin_rate_limit_config_admin_rate_limits_config_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminRateLimitUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Set Admin Rate Limit Config Admin Rate Limits Config Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/rate-limits/config/reset":{"post":{"tags":["admin"],"summary":"Reset Rate Limit Config","description":"Reset rate limit configuration to defaults for a specific API key.\n\n**Query Parameters:**\n- `api_key`: API key to reset configuration for\n\n**Response:**\n- Reset configuration (defaults)\n- Success status","operationId":"reset_rate_limit_config_admin_rate_limits_config_reset_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_key","in":"query","required":true,"schema":{"type":"string","description":"API key to reset config for","title":"Api Key"},"description":"API key to reset config for"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Reset Rate Limit Config Admin Rate Limits Config Reset Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/rate-limits/update":{"put":{"tags":["admin"],"summary":"Update Admin Rate Limits","description":"Update rate limits for a user.\n\nThis endpoint updates the rate limit configuration for a specific API key.\nIt's an alias for POST /admin/rate-limits/config for dashboard compatibility.\n\n**Request:**\n- `api_key`: Target API key\n- `config`: Rate limit configuration object\n\n**Response:**\n- Updated configuration\n- Success status","operationId":"update_admin_rate_limits_admin_rate_limits_update_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminRateLimitUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Admin Rate Limits Admin Rate Limits Update Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/rate-limits/delete":{"delete":{"tags":["admin"],"summary":"Delete Rate Limits","description":"Delete custom rate limits for a user (reset to defaults).\n\nThis endpoint removes custom rate limit configuration for a specific API key,\neffectively resetting them to system defaults.\n\n**Query Parameters:**\n- `api_key`: API key to delete rate limits for\n\n**Response:**\n- Success status\n- The key will use default rate limits going forward","operationId":"delete_rate_limits_admin_rate_limits_delete_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_key","in":"query","required":true,"schema":{"type":"string","description":"API key to delete rate limits for","title":"Api Key"},"description":"API key to delete rate limits for"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Rate Limits Admin Rate Limits Delete Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/rate-limits/users":{"get":{"tags":["admin"],"summary":"Get Users Rate Limits","description":"Get rate limits for all users.\n\nThis endpoint provides a list of users and their rate limit configurations.\n\n**Query Parameters:**\n- `limit`: Maximum users to return (1-500)\n- `offset`: Number to skip for pagination\n- `user_id`: Filter by specific user ID\n- `has_custom_config`: Filter by custom config presence (true/false)\n\n**Response:**\n- List of users with their rate limit configurations\n- Pagination info","operationId":"get_users_rate_limits_admin_rate_limits_users_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Maximum users to return","default":50,"title":"Limit"},"description":"Maximum users to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of users to skip","default":0,"title":"Offset"},"description":"Number of users to skip"},{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by specific user ID","title":"User Id"},"description":"Filter by specific user ID"},{"name":"has_custom_config","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by custom config presence","title":"Has Custom Config"},"description":"Filter by custom config presence"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Users Rate Limits Admin Rate Limits Users Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/ip-whitelist":{"post":{"tags":["Admin - IP Whitelist"],"summary":"Create IP whitelist entry","description":"Create a new IP whitelist entry to bypass rate limiting","operationId":"create_ip_whitelist_api_admin_ip_whitelist_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWhitelistRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhitelistEntryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Admin - IP Whitelist"],"summary":"List IP whitelist entries","description":"Get all IP whitelist entries","operationId":"list_ip_whitelists_api_admin_ip_whitelist_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"}},{"name":"enabled_only","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Enabled Only"}},{"name":"include_expired","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Expired"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WhitelistEntryResponse"},"title":"Response List Ip Whitelists Api Admin Ip Whitelist Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/ip-whitelist/{entry_id}":{"get":{"tags":["Admin - IP Whitelist"],"summary":"Get IP whitelist entry","description":"Get a specific IP whitelist entry by ID","operationId":"get_ip_whitelist_api_admin_ip_whitelist__entry_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"entry_id","in":"path","required":true,"schema":{"type":"string","title":"Entry Id"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhitelistEntryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Admin - IP Whitelist"],"summary":"Update IP whitelist entry","description":"Update an IP whitelist entry (enable/disable, reason, expiration)","operationId":"update_ip_whitelist_api_admin_ip_whitelist__entry_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"entry_id","in":"path","required":true,"schema":{"type":"string","title":"Entry Id"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateWhitelistRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhitelistEntryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin - IP Whitelist"],"summary":"Delete IP whitelist entry","description":"Delete an IP whitelist entry","operationId":"delete_ip_whitelist_api_admin_ip_whitelist__entry_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"entry_id","in":"path","required":true,"schema":{"type":"string","title":"Entry Id"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/ip-whitelist/check":{"post":{"tags":["Admin - IP Whitelist"],"summary":"Check if IP is whitelisted","description":"Check if a specific IP address is whitelisted","operationId":"check_ip_whitelist_api_admin_ip_whitelist_check_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckIPWhitelistRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckIPWhitelistResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/stripe/webhook":{"post":{"tags":["Stripe Payments"],"summary":"Stripe Webhook","description":"Stripe webhook endpoint - handles all Stripe events\n\nThis endpoint receives webhooks from Stripe for payment and subscription events:\n\nPayment Events:\n- checkout.session.completed - User completed checkout, add credits\n- checkout.session.expired - Checkout expired, mark payment as canceled\n- payment_intent.succeeded - Payment succeeded, add credits\n- payment_intent.payment_failed - Payment failed, update status\n- payment_intent.canceled - Payment canceled by user\n- charge.refunded - Charge was refunded, deduct credits\n\nSubscription Events:\n- customer.subscription.created - Subscription created, upgrade user tier\n- customer.subscription.updated - Subscription updated, sync status\n- customer.subscription.deleted - Subscription canceled, downgrade tier\n- invoice.paid - Subscription renewed, add monthly credits\n- invoice.payment_failed - Payment failed, mark subscription past_due\n\nIMPORTANT: This endpoint must be configured in your Stripe Dashboard:\n1. Go to Stripe Dashboard > Developers > Webhooks\n2. Add endpoint: https://your-domain.com/api/stripe/webhook\n3. Select events to listen for (listed above)\n4. Copy webhook signing secret to STRIPE_WEBHOOK_SECRET env variable\n\nIMPORTANT: This endpoint ALWAYS returns HTTP 200 status code to Stripe, even when\nprocessing fails. Errors are logged for investigation but do not cause HTTP errors,\nas this prevents Stripe from retrying the webhook. Stripe expects webhooks to be\ndelivered asynchronously and will handle retries automatically.\n\nArgs:\n    request: FastAPI request object containing raw webhook payload\n    stripe_signature: Stripe signature header for verification\n\nReturns:\n    JSONResponse with HTTP 200 and processing result (always)","operationId":"stripe_webhook_api_stripe_webhook_post","parameters":[{"name":"stripe-signature","in":"header","required":false,"schema":{"type":"string","title":"Stripe-Signature"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/stripe/checkout-session":{"post":{"tags":["Stripe Payments"],"summary":"Create Checkout Session","description":"Create a Stripe checkout session for hosted payment page\n\nThis creates a Stripe-hosted payment page where users can complete their purchase.\nAfter payment, Stripe redirects to success_url or cancel_url.\n\nArgs:\n    request: Checkout session parameters (amount, currency, URLs)\n    current_user: Authenticated user from token\n\nReturns:\n    Checkout session with URL and session ID\n\nExample request body:\n{\n    \"amount\": 1000,  # $10.00 in cents\n    \"currency\": \"usd\",\n    \"description\": \"1000 credits purchase\",\n    \"success_url\": \"https://your-app.com/payment/success\",\n    \"cancel_url\": \"https://your-app.com/payment/cancel\"\n}","operationId":"create_checkout_session_api_stripe_checkout_session_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCheckoutSessionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Checkout Session Api Stripe Checkout Session Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/stripe/checkout-session/{session_id}":{"get":{"tags":["Stripe Payments"],"summary":"Get Checkout Session","description":"Retrieve checkout session details\n\nArgs:\n    session_id: Stripe checkout session ID\n    current_user: Authenticated user\n\nReturns:\n    Checkout session details","operationId":"get_checkout_session_api_stripe_checkout_session__session_id__get","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","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/stripe/payment-intent":{"post":{"tags":["Stripe Payments"],"summary":"Create Payment Intent","description":"Create a Stripe payment intent for custom payment flows\n\nUse this for building your own payment UI with Stripe Elements.\nReturns a client_secret that you use on the frontend.\n\nArgs:\n    request: Payment intent parameters\n    current_user: Authenticated user\n\nReturns:\n    Payment intent with client_secret\n\nExample request body:\n{\n    \"amount\": 1000,\n    \"currency\": \"usd\",\n    \"description\": \"1000 credits\",\n    \"automatic_payment_methods\": true\n}","operationId":"create_payment_intent_api_stripe_payment_intent_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePaymentIntentRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Payment Intent Api Stripe Payment Intent Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/stripe/payment-intent/{payment_intent_id}":{"get":{"tags":["Stripe Payments"],"summary":"Get Payment Intent","description":"Retrieve payment intent details\n\nArgs:\n    payment_intent_id: Stripe payment intent ID\n    current_user: Authenticated user\n\nReturns:\n    Payment intent details","operationId":"get_payment_intent_api_stripe_payment_intent__payment_intent_id__get","parameters":[{"name":"payment_intent_id","in":"path","required":true,"schema":{"type":"string","title":"Payment Intent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/stripe/credit-packages":{"get":{"tags":["Stripe Payments"],"summary":"Get Credit Packages","description":"Get available credit packages for purchase\n\nReturns:\n    List of available credit packages with pricing\n\nExample response:\n{\n    \"packages\": [\n        {\n            \"id\": \"starter\",\n            \"name\": \"Starter Pack\",\n            \"credits\": 1000,\n            \"amount\": 1000,\n            \"currency\": \"usd\",\n            \"description\": \"Perfect for trying out the platform\"\n        }\n    ]\n}","operationId":"get_credit_packages_api_stripe_credit_packages_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/stripe/refund":{"post":{"tags":["Stripe Payments"],"summary":"Create Refund","description":"Create a refund for a payment (admin only)\n\nArgs:\n    request: Refund parameters\n    current_user: Authenticated user (must be admin)\n\nReturns:\n    Refund details","operationId":"create_refund_api_stripe_refund_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRefundRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Refund Api Stripe Refund Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/stripe/payments":{"get":{"tags":["Stripe Payments"],"summary":"Get Payment History","description":"Get payment history for the authenticated user\n\nArgs:\n    limit: Maximum number of payments to return\n    offset: Number of payments to skip\n    current_user: Authenticated user\n\nReturns:\n    List of user's payment records","operationId":"get_payment_history_api_stripe_payments_get","parameters":[{"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"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/stripe/payments/{payment_id}":{"get":{"tags":["Stripe Payments"],"summary":"Get Payment Details","description":"Get details of a specific payment\n\nArgs:\n    payment_id: Payment record ID\n    current_user: Authenticated user\n\nReturns:\n    Payment details","operationId":"get_payment_details_api_stripe_payments__payment_id__get","parameters":[{"name":"payment_id","in":"path","required":true,"schema":{"type":"integer","title":"Payment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/stripe/subscription-checkout":{"post":{"tags":["Stripe Payments"],"summary":"Create Subscription Checkout","description":"Create a Stripe checkout session for subscription\n\nThis endpoint creates a Stripe-hosted checkout page for recurring subscriptions.\nAfter payment, Stripe redirects to success_url or cancel_url.\n\nArgs:\n    request: Subscription checkout parameters (price_id, product_id, URLs)\n    current_user: Authenticated user from token\n\nReturns:\n    Checkout session with URL and session ID\n\nExample request body:\n{\n    \"price_id\": \"price_1SNk2KLVT8n4vaEn7lHNPYWB\",\n    \"product_id\": \"prod_TKOqQPhVRxNp4Q\",\n    \"customer_email\": \"user@example.com\",\n    \"success_url\": \"https://beta.gatewayz.ai/settings/credits?session_id={{CHECKOUT_SESSION_ID}}\",\n    \"cancel_url\": \"https://beta.gatewayz.ai/settings/credits\",\n    \"mode\": \"subscription\"\n}\n\nExample response:\n{\n    \"session_id\": \"cs_test_xxxxx\",\n    \"url\": \"https://checkout.stripe.com/pay/cs_test_xxxxx\",\n    \"customer_id\": \"cus_xxxxx\",\n    \"status\": \"open\"\n}","operationId":"create_subscription_checkout_api_stripe_subscription_checkout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSubscriptionCheckoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Subscription Checkout Api Stripe Subscription Checkout Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/stripe/subscription":{"get":{"tags":["Stripe Payments"],"summary":"Get Current Subscription","description":"Get the current user's subscription status\n\nReturns:\n    Current subscription details including tier, status, and billing period\n\nExample response:\n{\n    \"has_subscription\": true,\n    \"subscription_id\": \"sub_xxxxx\",\n    \"status\": \"active\",\n    \"tier\": \"pro\",\n    \"current_period_start\": \"2024-01-01T00:00:00Z\",\n    \"current_period_end\": \"2024-02-01T00:00:00Z\",\n    \"cancel_at_period_end\": false,\n    \"product_id\": \"prod_TKOqQPhVRxNp4Q\",\n    \"price_id\": \"price_xxxxx\"\n}","operationId":"get_current_subscription_api_stripe_subscription_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Current Subscription Api Stripe Subscription Get"}}}}}}},"/api/stripe/subscription/upgrade":{"post":{"tags":["Stripe Payments"],"summary":"Upgrade Subscription","description":"Upgrade subscription to a higher tier (e.g., Pro -> Max)\n\nThis uses Stripe's subscription update with proration to charge the difference immediately.\n\nArgs:\n    request: Upgrade request with new price/product IDs\n    current_user: Authenticated user from token\n\nReturns:\n    Upgrade result with new subscription status\n\nExample request body:\n{\n    \"new_price_id\": \"price_xxxxx\",\n    \"new_product_id\": \"prod_TKOraBpWMxMAIu\",\n    \"proration_behavior\": \"create_prorations\"\n}\n\nExample response:\n{\n    \"success\": true,\n    \"subscription_id\": \"sub_xxxxx\",\n    \"status\": \"active\",\n    \"current_tier\": \"max\",\n    \"message\": \"Successfully upgraded to max tier\"\n}","operationId":"upgrade_subscription_api_stripe_subscription_upgrade_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpgradeSubscriptionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Upgrade Subscription Api Stripe Subscription Upgrade Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/stripe/subscription/downgrade":{"post":{"tags":["Stripe Payments"],"summary":"Downgrade Subscription","description":"Downgrade subscription to a lower tier (e.g., Max -> Pro)\n\nThis uses Stripe's subscription update with proration to credit the unused time.\n\nArgs:\n    request: Downgrade request with new price/product IDs\n    current_user: Authenticated user from token\n\nReturns:\n    Downgrade result with new subscription status\n\nExample request body:\n{\n    \"new_price_id\": \"price_xxxxx\",\n    \"new_product_id\": \"prod_TKOqQPhVRxNp4Q\",\n    \"proration_behavior\": \"create_prorations\"\n}\n\nExample response:\n{\n    \"success\": true,\n    \"subscription_id\": \"sub_xxxxx\",\n    \"status\": \"active\",\n    \"current_tier\": \"pro\",\n    \"message\": \"Successfully downgraded to pro tier. Credit applied for unused time.\"\n}","operationId":"downgrade_subscription_api_stripe_subscription_downgrade_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DowngradeSubscriptionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Downgrade Subscription Api Stripe Subscription Downgrade Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/stripe/subscription/cancel":{"post":{"tags":["Stripe Payments"],"summary":"Cancel Subscription","description":"Cancel subscription\n\nBy default, cancels at the end of the billing period (user keeps access until then).\nSet cancel_at_period_end=false for immediate cancellation.\n\nArgs:\n    request: Cancel request with options\n    current_user: Authenticated user from token\n\nReturns:\n    Cancellation result\n\nExample request body (cancel at period end):\n{\n    \"cancel_at_period_end\": true,\n    \"reason\": \"Switching to another service\"\n}\n\nExample response:\n{\n    \"success\": true,\n    \"subscription_id\": \"sub_xxxxx\",\n    \"status\": \"cancel_scheduled\",\n    \"current_tier\": \"pro\",\n    \"message\": \"Subscription will be canceled at the end of the billing period...\",\n    \"effective_date\": \"2024-02-01T00:00:00Z\"\n}","operationId":"cancel_subscription_api_stripe_subscription_cancel_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelSubscriptionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Cancel Subscription Api Stripe Subscription Cancel Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/chat/sessions":{"post":{"tags":["chat-history"],"summary":"Create Session","description":"Create a new chat session\n\nOPTIMIZATIONS:\n- Cached user lookup (reduces DB queries by 95%)\n- Background activity logging (non-blocking)\n- Performance metrics logging","operationId":"create_session_v1_chat_sessions_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateChatSessionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatSessionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["chat-history"],"summary":"Get Sessions","description":"Get all chat sessions for the authenticated user","operationId":"get_sessions_v1_chat_sessions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatSessionsListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/chat/sessions/{session_id}":{"get":{"tags":["chat-history"],"summary":"Get Session","description":"Get a specific chat session with messages","operationId":"get_session_v1_chat_sessions__session_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"integer","title":"Session Id"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatSessionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["chat-history"],"summary":"Update Session","description":"Update a chat session","operationId":"update_session_v1_chat_sessions__session_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"integer","title":"Session Id"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateChatSessionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatSessionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["chat-history"],"summary":"Delete Session","description":"Delete a chat session","operationId":"delete_session_v1_chat_sessions__session_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"integer","title":"Session Id"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/chat/stats":{"get":{"tags":["chat-history"],"summary":"Get Stats","description":"Get chat session statistics for the authenticated user","operationId":"get_stats_v1_chat_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatSessionStatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/chat/search":{"post":{"tags":["chat-history"],"summary":"Search Sessions","description":"Search chat sessions by title or message content","operationId":"search_sessions_v1_chat_search_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchChatSessionsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatSessionsListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/chat/sessions/{session_id}/messages":{"post":{"tags":["chat-history"],"summary":"Save Message","description":"Save a message to a chat session (accepts JSON body)","operationId":"save_message_v1_chat_sessions__session_id__messages_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"integer","title":"Session Id"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveChatMessageRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/chat/sessions/{session_id}/messages/batch":{"post":{"tags":["chat-history"],"summary":"Save Messages Batch","description":"OPTIMIZATION: Save multiple messages in a single request\nReduces API overhead by 60-80% when saving multiple messages","operationId":"save_messages_batch_v1_chat_sessions__session_id__messages_batch_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"integer","title":"Session Id"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchMessageRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/chat/feedback":{"post":{"tags":["chat-history"],"summary":"Submit Feedback","description":"Submit feedback for a chat message (thumbs up, thumbs down, etc.)\n\nThis endpoint allows users to provide feedback on assistant responses.\nFeedback can be associated with a specific session and/or message,\nor submitted standalone for general feedback.\n\nFeedback types:\n- thumbs_up: User found the response helpful\n- thumbs_down: User found the response unhelpful\n- regenerate: User requested a new response\n\nOptional fields:\n- rating: 1-5 star rating\n- comment: Text feedback\n- model: The model that generated the response\n- metadata: Additional context (response content, prompt, etc.)","operationId":"submit_feedback_v1_chat_feedback_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveMessageFeedbackRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageFeedbackResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["chat-history"],"summary":"Get My Feedback","description":"Get the authenticated user's feedback history.\n\nSupports filtering by:\n- feedback_type: 'thumbs_up', 'thumbs_down', 'regenerate'\n- session_id: specific chat session\n- model: specific model name","operationId":"get_my_feedback_v1_chat_feedback_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"feedback_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by feedback type","title":"Feedback Type"},"description":"Filter by feedback type"},{"name":"session_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by session ID","title":"Session Id"},"description":"Filter by session ID"},{"name":"model","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by model name","title":"Model"},"description":"Filter by model name"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageFeedbackListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/chat/feedback/stats":{"get":{"tags":["chat-history"],"summary":"Get My Feedback Stats","description":"Get aggregated feedback statistics for the authenticated user.\n\nReturns:\n- Total feedback count\n- Thumbs up/down counts and rates\n- Average rating (if ratings provided)\n- Breakdown by model","operationId":"get_my_feedback_stats_v1_chat_feedback_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by model name","title":"Model"},"description":"Filter by model name"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"Number of days to aggregate","default":30,"title":"Days"},"description":"Number of days to aggregate"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackStatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/chat/sessions/{session_id}/feedback":{"get":{"tags":["chat-history"],"summary":"Get Session Feedback","description":"Get all feedback for a specific chat session.","operationId":"get_session_feedback_v1_chat_sessions__session_id__feedback_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"integer","title":"Session Id"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageFeedbackListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/chat/feedback/{feedback_id}":{"put":{"tags":["chat-history"],"summary":"Update My Feedback","description":"Update an existing feedback record.\n\nAll fields are optional - only provided fields will be updated.","operationId":"update_my_feedback_v1_chat_feedback__feedback_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"feedback_id","in":"path","required":true,"schema":{"type":"integer","title":"Feedback Id"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMessageFeedbackRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageFeedbackResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["chat-history"],"summary":"Delete My Feedback","description":"Delete a feedback record.","operationId":"delete_my_feedback_v1_chat_feedback__feedback_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"feedback_id","in":"path","required":true,"schema":{"type":"integer","title":"Feedback Id"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/chat/share":{"post":{"tags":["chat-share"],"summary":"Create Share Link","description":"Create a shareable link for a chat session.\n\nThe link can be shared publicly and allows anyone with the link\nto view the entire conversation.\n\nRate limited to 10 shares per hour per user.","operationId":"create_share_link_v1_chat_share_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateShareLinkRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateShareLinkResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["chat-share"],"summary":"Get My Share Links","description":"Get all share links created by the authenticated user.","operationId":"get_my_share_links_v1_chat_share_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareLinksListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/chat/share/{token}":{"get":{"tags":["chat-share"],"summary":"Get Shared Chat","description":"Get a shared chat by its token (public endpoint).\n\nThis endpoint does not require authentication and returns the\nchat conversation including all messages.","operationId":"get_shared_chat_v1_chat_share__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SharedChatPublicView"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["chat-share"],"summary":"Delete Share Link","description":"Delete a share link by its token.\n\nOnly the user who created the share link can delete it.","operationId":"delete_share_link_v1_chat_share__token__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ranking/models":{"get":{"tags":["ranking"],"summary":"Get Ranking Models","description":"Get all models from latest_models table for ranking page with logo URLs","operationId":"get_ranking_models_ranking_models_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Limit number of results","title":"Limit"},"description":"Limit number of results"},{"name":"offset","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Offset for pagination","default":0,"title":"Offset"},"description":"Offset for pagination"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ranking/apps":{"get":{"tags":["ranking"],"summary":"Get Ranking Apps","description":"Get all apps from latest_apps table for ranking page","operationId":"get_ranking_apps_ranking_apps_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/user/activity/stats":{"get":{"tags":["Activity"],"summary":"Get Activity Stats","description":"Get aggregated activity statistics for the authenticated user\n\nReturns activity stats including:\n- Total requests, tokens, and spend\n- Data aggregated by date (daily_stats)\n- Breakdown by model\n- Breakdown by provider\n\nArgs:\n    from_date: Start date in YYYY-MM-DD format (optional)\n    to_date: End date in YYYY-MM-DD format (optional)\n    days: Number of days to look back (alternative to from/to, default 30)\n    current_user: Authenticated user\n\nReturns:\n    Activity statistics\n\nExample response:\n{\n    \"total_requests\": 150,\n    \"total_tokens\": 45000,\n    \"total_spend\": 2.35,\n    \"daily_stats\": [\n        {\n            \"date\": \"2025-01-01\",\n            \"spend\": 0.15,\n            \"tokens\": 3000,\n            \"requests\": 10\n        },\n        ...\n    ]\n}","operationId":"get_activity_stats_user_activity_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":365,"minimum":1},{"type":"null"}],"description":"Number of days to look back","title":"Days"},"description":"Number of days to look back"},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"From"},"description":"Start date (YYYY-MM-DD)"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"To"},"description":"End date (YYYY-MM-DD)"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/user/activity/log":{"get":{"tags":["Activity"],"summary":"Get Activity Log","description":"Get paginated activity log for the authenticated user\n\nReturns detailed activity records with:\n- Timestamp\n- Model and provider\n- Tokens used and cost\n- Speed (tokens/second)\n- Finish reason\n- Application name\n\nArgs:\n    limit: Maximum records to return (1-1000, default 10)\n    offset: Records to skip for pagination (default 0)\n    page: Page number (alternative to offset, starts at 1)\n    from_date: Start date in YYYY-MM-DD format (optional)\n    to_date: End date in YYYY-MM-DD format (optional)\n    model: Optional model name filter\n    provider: Optional provider name filter\n    current_user: Authenticated user\n\nReturns:\n    Object with logs array and metadata\n\nExample response:\n{\n    \"logs\": [\n        {\n            \"id\": 123,\n            \"user_id\": 1,\n            \"timestamp\": \"2025-01-06T13:00:00Z\",\n            \"model\": \"gpt-4\",\n            \"provider\": \"OpenAI\",\n            \"tokens\": 1234,\n            \"cost\": 0.0123,\n            \"speed\": 45.67,\n            \"finish_reason\": \"stop\",\n            \"app\": \"API\"\n        },\n        ...\n    ],\n    \"total\": 150,\n    \"page\": 1,\n    \"limit\": 10\n}","operationId":"get_activity_log_user_activity_log_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Maximum number of records","default":10,"title":"Limit"},"description":"Maximum number of records"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of records to skip","default":0,"title":"Offset"},"description":"Number of records to skip"},{"name":"page","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"description":"Page number (alternative to offset)","title":"Page"},"description":"Page number (alternative to offset)"},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"From"},"description":"Start date (YYYY-MM-DD)"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"To"},"description":"End date (YYYY-MM-DD)"},{"name":"model","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by model name","title":"Model"},"description":"Filter by model name"},{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by provider name","title":"Provider"},"description":"Filter by provider name"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/coupons/redeem":{"post":{"tags":["coupons"],"summary":"Redeem Coupon Endpoint","description":"Redeem a coupon code\n\n- Validates the coupon\n- Checks if user can redeem it\n- Adds credits to user balance\n- Records the redemption","operationId":"redeem_coupon_endpoint_coupons_redeem_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedeemCouponRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedemptionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/coupons/available":{"get":{"tags":["coupons"],"summary":"Get Available Coupons","description":"Get all coupons available for the current user\n\nReturns both:\n- User-specific coupons assigned to this user\n- Global coupons not yet redeemed by this user","operationId":"get_available_coupons_coupons_available_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AvailableCouponResponse"},"title":"Response Get Available Coupons Coupons Available Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/coupons/history":{"get":{"tags":["coupons"],"summary":"Get Redemption History","description":"Get redemption history for the current user\n\nShows all coupons the user has redeemed with details","operationId":"get_redemption_history_coupons_history_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedemptionHistoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/coupons":{"post":{"tags":["admin","coupons"],"summary":"Create Coupon Endpoint","description":"Create a new coupon (Admin only)\n\n- User-specific: assigned to one user, one-time use\n- Global: available to all users, one-time per user","operationId":"create_coupon_endpoint_admin_coupons_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCouponRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CouponResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["admin","coupons"],"summary":"List Coupons Endpoint","description":"List all coupons with filters (Admin only)\n\nQuery parameters:\n- scope: Filter by coupon_scope (user_specific or global)\n- coupon_type: Filter by type\n- is_active: Filter by active status\n- limit: Max results (default 100)\n- offset: Pagination offset","operationId":"list_coupons_endpoint_admin_coupons_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"scope","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scope"}},{"name":"coupon_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Coupon Type"}},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},{"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"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListCouponsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/coupons/{coupon_id}":{"get":{"tags":["admin","coupons"],"summary":"Get Coupon Endpoint","description":"Get a specific coupon by ID (Admin only)","operationId":"get_coupon_endpoint_admin_coupons__coupon_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"coupon_id","in":"path","required":true,"schema":{"type":"integer","title":"Coupon Id"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CouponResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["admin","coupons"],"summary":"Update Coupon Endpoint","description":"Update a coupon (Admin only)","operationId":"update_coupon_endpoint_admin_coupons__coupon_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"coupon_id","in":"path","required":true,"schema":{"type":"integer","title":"Coupon Id"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCouponRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CouponResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin","coupons"],"summary":"Deactivate Coupon Endpoint","description":"Deactivate a coupon (Admin only)","operationId":"deactivate_coupon_endpoint_admin_coupons__coupon_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"coupon_id","in":"path","required":true,"schema":{"type":"integer","title":"Coupon Id"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/coupons/{coupon_id}/analytics":{"get":{"tags":["admin","coupons"],"summary":"Get Coupon Analytics Endpoint","description":"Get detailed analytics for a coupon (Admin only)","operationId":"get_coupon_analytics_endpoint_admin_coupons__coupon_id__analytics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"coupon_id","in":"path","required":true,"schema":{"type":"integer","title":"Coupon Id"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CouponAnalyticsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/coupons/stats/overview":{"get":{"tags":["admin","coupons"],"summary":"Get Coupon Stats Endpoint","description":"Get system-wide coupon statistics (Admin only)","operationId":"get_coupon_stats_endpoint_admin_coupons_stats_overview_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CouponStatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/referral/stats":{"get":{"tags":["referral"],"summary":"Get My Referral Stats","description":"Get referral statistics for the authenticated user.\n\nReturns information about:\n- Your unique referral code\n- Shareable invite link\n- How many people have used your code\n- How many referrals have completed (referrals are tracked for attribution only and do not grant credits)\n- Remaining uses available","operationId":"get_my_referral_stats_referral_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReferralStatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/referral/validate":{"post":{"tags":["referral"],"summary":"Validate Referral","description":"Validate if a referral code can be used by the authenticated user.\n\nChecks:\n- Code exists\n- User hasn't already used a referral code\n- User hasn't made their first purchase yet\n- Code hasn't reached its usage limit (10 uses)\n- User isn't trying to use their own code","operationId":"validate_referral_referral_validate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateReferralRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateReferralResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/referral/generate":{"post":{"tags":["referral"],"summary":"Generate My Referral Code","description":"Generate a referral code for the authenticated user if they don't have one.\n\nIf the user already has a referral code, returns the existing code.","operationId":"generate_my_referral_code_referral_generate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/referral/code":{"get":{"tags":["referral"],"summary":"Get My Referral Code","description":"Get your referral code and shareable invite link.\n\nIf you don't have a referral code yet, one will be created automatically.\n\nReturns:\n- referral_code: Your unique 8-character code\n- invite_link: Shareable URL that pre-fills the code for new users\n- share_message: Copy-paste message with your invite link","operationId":"get_my_referral_code_referral_code_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/roles/update":{"post":{"tags":["admin","roles"],"summary":"Update Role","description":"Update a user's role (Admin only)\n\nRoles:\n- user: Basic user access\n- developer: Extended API access\n- admin: Full system access","operationId":"update_role_admin_roles_update_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRoleRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/roles/{user_id}":{"get":{"tags":["admin","roles"],"summary":"Get User Role Info","description":"Get user's role and permissions (Admin only)","operationId":"get_user_role_info_admin_roles__user_id__get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/roles/audit/log":{"get":{"tags":["admin","roles"],"summary":"Get Audit Log","description":"Get role change audit log (Admin only)","operationId":"get_audit_log_admin_roles_audit_log_get","parameters":[{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"User Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleAuditLogResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/roles/list/{role}":{"get":{"tags":["admin","roles"],"summary":"List Users By Role","description":"List all users with a specific role (Admin only)","operationId":"list_users_by_role_admin_roles_list__role__get","parameters":[{"name":"role","in":"path","required":true,"schema":{"type":"string","title":"Role"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/roles/permissions/{role}":{"get":{"tags":["admin","roles"],"summary":"Get Role Permissions Endpoint","description":"Get all permissions for a role (Admin only)","operationId":"get_role_permissions_endpoint_admin_roles_permissions__role__get","parameters":[{"name":"role","in":"path","required":true,"schema":{"type":"string","title":"Role"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/analytics/transactions":{"get":{"tags":["Analytics"],"summary":"Get Transaction Analytics","description":"Get daily summary of model inference per model from OpenRouter\n\nThis endpoint fetches transaction analytics data from OpenRouter API\nand returns it publicly (no authentication required).\n\nArgs:\n    window: Time window for analytics (default: '1d')\n            Valid options: '1hr', '1d', '1mo', '1y'\n\nReturns:\n    Transaction analytics data from OpenRouter\n\nExample:\n    GET /analytics/transactions?window=1d","operationId":"get_transaction_analytics_analytics_transactions_get","parameters":[{"name":"window","in":"query","required":false,"schema":{"type":"string","description":"Time window: '1hr', '1d', '1mo', or '1y'","default":"1d","title":"Window"},"description":"Time window: '1hr', '1d', '1mo', or '1y'"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/analytics/transactions/summary":{"get":{"tags":["Analytics"],"summary":"Get Transaction Summary","description":"Get a processed summary of transaction analytics\n\nThis endpoint fetches data from OpenRouter and processes it to provide\na cleaner summary format. No authentication required.\n\nArgs:\n    window: Time window for analytics (default: '1d')\n            Valid options: '1hr', '1d', '1mo', '1y'\n\nReturns:\n    Processed summary of transaction analytics","operationId":"get_transaction_summary_analytics_transactions_summary_get","parameters":[{"name":"window","in":"query","required":false,"schema":{"type":"string","description":"Time window: '1hr', '1d', '1mo', or '1y'","default":"1d","title":"Window"},"description":"Time window: '1hr', '1d', '1mo', or '1y'"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/analytics/events":{"post":{"tags":["analytics"],"summary":"Log Event","description":"Log an analytics event to both Statsig and PostHog via backend\n\nThis endpoint allows the frontend to send analytics events to the backend,\nwhich then forwards them to both analytics platforms. This avoids ad-blocker issues.\n\nArgs:\n    event: The analytics event to log\n    current_user: Authenticated user (from auth middleware)\n\nReturns:\n    Success message","operationId":"log_event_v1_analytics_events_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsEvent"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/analytics/batch":{"post":{"tags":["analytics"],"summary":"Log Batch Events","description":"Log multiple analytics events in batch to both Statsig and PostHog\n\nArgs:\n    events: List of analytics events to log\n    current_user: Authenticated user (from auth middleware)\n\nReturns:\n    Success message with count","operationId":"log_batch_events_v1_analytics_batch_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AnalyticsEvent"},"title":"Events"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/analytics/session/start":{"post":{"tags":["analytics"],"summary":"Log Session Start","description":"Log a session start event for DAU/WAU/MAU tracking.\n\nThis endpoint should be called when:\n- User opens the app/website\n- User logs in\n- User returns after being idle\n\nThe session_start event is used by Statsig to compute Product Growth metrics\nincluding Daily Active Users (DAU), Weekly Active Users (WAU),\nMonthly Active Users (MAU), stickiness, and retention rates.\n\nArgs:\n    session: Session start event with platform and optional metadata\n    current_user: Authenticated user (from auth middleware)\n\nReturns:\n    Success message","operationId":"log_session_start_v1_analytics_session_start_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionStartEvent"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/trial/users":{"get":{"tags":["admin","trial-analytics"],"summary":"Get Trial Users","description":"Get detailed trial user list with usage and segmentation data\n\n**Purpose:** Monitor trial usage to detect abuse, track conversion, and segment users","operationId":"get_trial_users_admin_trial_users_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"enum":["active","expired","converted","all"],"type":"string","description":"Filter by trial status","default":"all","title":"Status"},"description":"Filter by trial status"},{"name":"sort_by","in":"query","required":false,"schema":{"enum":["requests","tokens","credits","created_at"],"type":"string","description":"Sort by field","default":"created_at","title":"Sort By"},"description":"Sort by field"},{"name":"sort_order","in":"query","required":false,"schema":{"enum":["asc","desc"],"type":"string","description":"Sort order","default":"desc","title":"Sort Order"},"description":"Sort order"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Results per page","default":100,"title":"Limit"},"description":"Results per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination offset","default":0,"title":"Offset"},"description":"Pagination offset"},{"name":"domain_filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by email domain","title":"Domain Filter"},"description":"Filter by email domain"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrialUsersResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/trial/domain-analysis":{"get":{"tags":["admin","trial-analytics"],"summary":"Get Domain Analysis","description":"Analyze trial users by email domain to detect potential abuse with Redis caching\n\n**Purpose:** Group users by domain and calculate abuse scores","operationId":"get_domain_analysis_admin_trial_domain_analysis_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainAnalysisResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/trial/conversion-funnel":{"get":{"tags":["admin","trial-analytics"],"summary":"Get Conversion Funnel","description":"Get conversion funnel data to understand at what point trials convert to paid\n\n**Purpose:** Analyze conversion patterns and optimize trial experience","operationId":"get_conversion_funnel_admin_trial_conversion_funnel_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversionFunnelResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/trial/ip-analysis":{"get":{"tags":["admin","trial-analytics"],"summary":"Get Ip Analysis","description":"Analyze trial signups by IP address to detect multiple accounts from same IP\n\n**Purpose:** Detect potential abuse from multiple accounts on same IP\n\n**Note:** IP tracking not yet implemented. Returns empty list for now.","operationId":"get_ip_analysis_admin_trial_ip_analysis_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"min_accounts","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Minimum accounts per IP to show","default":2,"title":"Min Accounts"},"description":"Minimum accounts per IP to show"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPAnalysisResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/trial/save-conversion-metrics":{"post":{"tags":["admin","trial-analytics"],"summary":"Save Conversion Metrics","description":"Save metrics when user converts from trial to paid\n\n**Purpose:** Record usage metrics at moment of conversion for analysis\n\n**Note:** This should be called automatically when a user upgrades from trial","operationId":"save_conversion_metrics_admin_trial_save_conversion_metrics_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveConversionMetricsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveConversionMetricsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/trial/cohort-analysis":{"get":{"tags":["admin","trial-analytics"],"summary":"Get Cohort Analysis","description":"Provide week-over-week or month-over-month cohort conversion analysis\n\n**Purpose:** Track conversion rates and patterns across different signup cohorts","operationId":"get_cohort_analysis_admin_trial_cohort_analysis_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"enum":["week","month"],"type":"string","description":"Cohort period: week or month","default":"week","title":"Period"},"description":"Cohort period: week or month"},{"name":"lookback","in":"query","required":false,"schema":{"type":"integer","maximum":52,"minimum":1,"description":"Number of periods to look back","default":12,"title":"Lookback"},"description":"Number of periods to look back"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CohortAnalysisResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/partner-trials/config/{partner_code}":{"get":{"tags":["Partner Trials"],"summary":"Get Partner Config","description":"Get public configuration for a partner trial.\n\nUsed by frontend to display trial benefits on landing pages.\nThis endpoint is public and does not require authentication.","operationId":"get_partner_config_partner_trials_config__partner_code__get","parameters":[{"name":"partner_code","in":"path","required":true,"schema":{"type":"string","title":"Partner Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnerConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/partner-trials/check/{code}":{"get":{"tags":["Partner Trials"],"summary":"Check Partner Code","description":"Check if a code is a valid partner code.\n\nReturns whether the code is a partner code (vs a user referral code).\nThis endpoint is public and does not require authentication.","operationId":"check_partner_code_partner_trials_check__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/partner-trials/start":{"post":{"tags":["Partner Trials"],"summary":"Start Partner Trial","description":"Start a partner trial for the current user.\n\nThis endpoint is called when a user signs up through a partner landing page\n(e.g., /redbeard) and needs to activate their extended trial.\n\nRequires authentication.","operationId":"start_partner_trial_partner_trials_start_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartPartnerTrialRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnerTrialResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/partner-trials/status":{"get":{"tags":["Partner Trials"],"summary":"Get Partner Trial Status","description":"Get the current user's partner trial status.\n\nReturns information about the user's active or expired partner trial,\nincluding remaining days, credits used, and conversion status.\n\nRequires authentication.","operationId":"get_partner_trial_status_partner_trials_status_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnerTrialStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/partner-trials/daily-limit":{"get":{"tags":["Partner Trials"],"summary":"Get Daily Limit","description":"Get the daily usage limit for the current user.\n\nPartner trial users may have different daily limits than standard users.\n\nRequires authentication.","operationId":"get_daily_limit_partner_trials_daily_limit_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/partner-trials/analytics/{partner_code}":{"get":{"tags":["Partner Trials"],"summary":"Get Partner Analytics","description":"Get analytics for a specific partner's trials.\n\nReturns conversion rates, revenue, and trial status breakdown.\n\nRequires admin privileges (env ADMIN_API_KEY or user with admin role).","operationId":"get_partner_analytics_partner_trials_analytics__partner_code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"partner_code","in":"path","required":true,"schema":{"type":"string","title":"Partner Code"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter start date","title":"Start Date"},"description":"Filter start date"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter end date","title":"End Date"},"description":"Filter end date"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnerAnalyticsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/partner-trials/expire/{target_user_id}":{"post":{"tags":["Partner Trials"],"summary":"Force Expire Trial","description":"Force expire a user's partner trial.\n\nAdmin-only endpoint for manually expiring trials.\nRequires env ADMIN_API_KEY or user with admin role.","operationId":"force_expire_trial_partner_trials_expire__target_user_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"target_user_id","in":"path","required":true,"schema":{"type":"integer","title":"Target User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/prometheus/data/admin/cache/invalidate":{"delete":{"tags":["prometheus-data"],"summary":"Invalidate Cache","description":"Invalidate prometheus data cache entries.\n\nUse this to force fresh data on the next request.\nPatterns: * (all), or specific key patterns.","operationId":"invalidate_cache_prometheus_data_admin_cache_invalidate_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pattern","in":"query","required":false,"schema":{"type":"string","description":"Cache key pattern to invalidate (* for all)","default":"*","title":"Pattern"},"description":"Cache key pattern to invalidate (* for all)"},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/prometheus/data/admin/cache/status":{"get":{"tags":["prometheus-data"],"summary":"Get Cache Status","description":"Get cache status and statistics.\n\nReturns information about cached data and TTL settings.","operationId":"get_cache_status_prometheus_data_admin_cache_status_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/prometheus/data/metrics":{"get":{"tags":["prometheus-data"],"summary":"Get Prometheus Metrics","description":"Get metrics in Prometheus text exposition format.\n\nThis endpoint is designed to be scraped by Prometheus and provides metrics\nrequired for Grafana alerting rules:\n\n- health_score{provider=\"...\"} - Provider health score (0-100)\n- circuit_breaker_state{provider=\"...\", model=\"...\", state=\"...\"} - 1 if state matches\n- error_rate{provider=\"...\"} - Provider error rate (0-1)\n- provider_availability{provider=\"...\"} - Provider availability (0-100)\n- total_requests{provider=\"...\"} - Total requests in last hour\n- avg_latency_ms{provider=\"...\"} - Average latency in ms\n\nReturns: text/plain in Prometheus format","operationId":"get_prometheus_metrics_prometheus_data_metrics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/prometheus/data/instrumentation/health":{"get":{"tags":["prometheus-data"],"summary":"Get Instrumentation Health","description":"Get overall instrumentation and observability health.\n\nChecks connectivity to Redis, Supabase, Prometheus, Loki, Tempo.\n\nNO CACHING - this is a live health check.","operationId":"get_instrumentation_health_prometheus_data_instrumentation_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/prometheus/data/instrumentation/loki/status":{"get":{"tags":["prometheus-data"],"summary":"Get Loki Status","description":"Get Loki logging service status (NO CACHING).","operationId":"get_loki_status_prometheus_data_instrumentation_loki_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/prometheus/data/instrumentation/tempo/status":{"get":{"tags":["prometheus-data"],"summary":"Get Tempo Status","description":"Get Tempo tracing service status (NO CACHING).","operationId":"get_tempo_status_prometheus_data_instrumentation_tempo_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/prometheus/data/instrumentation/test-log":{"post":{"tags":["prometheus-data"],"summary":"Test Log Ingestion","description":"Test log ingestion to Loki (NO CACHING).","operationId":"test_log_ingestion_prometheus_data_instrumentation_test_log_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"message","in":"query","required":false,"schema":{"type":"string","description":"Test message to log","default":"Test log message","title":"Message"},"description":"Test message to log"},{"name":"level","in":"query","required":false,"schema":{"type":"string","description":"Log level (debug, info, warn, error)","default":"info","title":"Level"},"description":"Log level (debug, info, warn, error)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/prometheus/data/instrumentation/test-trace":{"post":{"tags":["prometheus-data"],"summary":"Test Trace Ingestion","description":"Test trace ingestion to Tempo (NO CACHING).","operationId":"test_trace_ingestion_prometheus_data_instrumentation_test_trace_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"operation","in":"query","required":false,"schema":{"type":"string","description":"Operation name for the trace","default":"test_operation","title":"Operation"},"description":"Operation name for the trace"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/nosana/credits/balance":{"get":{"tags":["nosana"],"summary":"Get Credit Balance","description":"Get the current credit balance for the Nosana account.","operationId":"get_credit_balance_nosana_credits_balance_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditsBalanceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/nosana/deployments":{"get":{"tags":["nosana"],"summary":"List All Deployments","description":"List all deployments for the authenticated user.","operationId":"list_all_deployments_nosana_deployments_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["nosana"],"summary":"Create New Deployment","description":"Create a new deployment.","operationId":"create_new_deployment_nosana_deployments_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/nosana/deployments/{deployment_id}":{"get":{"tags":["nosana"],"summary":"Get Deployment Details","description":"Get details for a specific deployment.","operationId":"get_deployment_details_nosana_deployments__deployment_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"deployment_id","in":"path","required":true,"schema":{"type":"string","title":"Deployment Id"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/nosana/deployments/{deployment_id}/start":{"post":{"tags":["nosana"],"summary":"Start Existing Deployment","description":"Start a deployment (activate from draft or stopped state).","operationId":"start_existing_deployment_nosana_deployments__deployment_id__start_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"deployment_id","in":"path","required":true,"schema":{"type":"string","title":"Deployment Id"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/nosana/deployments/{deployment_id}/stop":{"post":{"tags":["nosana"],"summary":"Stop Running Deployment","description":"Stop a running deployment.","operationId":"stop_running_deployment_nosana_deployments__deployment_id__stop_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"deployment_id","in":"path","required":true,"schema":{"type":"string","title":"Deployment Id"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/nosana/deployments/{deployment_id}/archive":{"post":{"tags":["nosana"],"summary":"Archive Existing Deployment","description":"Archive a deployment.","operationId":"archive_existing_deployment_nosana_deployments__deployment_id__archive_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"deployment_id","in":"path","required":true,"schema":{"type":"string","title":"Deployment Id"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/nosana/deployments/{deployment_id}/replicas":{"patch":{"tags":["nosana"],"summary":"Update Replicas","description":"Update the replica count for a deployment.","operationId":"update_replicas_nosana_deployments__deployment_id__replicas_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"deployment_id","in":"path","required":true,"schema":{"type":"string","title":"Deployment Id"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentReplicaUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/nosana/deployments/{deployment_id}/revisions":{"post":{"tags":["nosana"],"summary":"Create Revision","description":"Create a new revision for a deployment.","operationId":"create_revision_nosana_deployments__deployment_id__revisions_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"deployment_id","in":"path","required":true,"schema":{"type":"string","title":"Deployment Id"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentRevisionCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/nosana/deployments/llm":{"post":{"tags":["nosana"],"summary":"Deploy Llm Inference","description":"Quick deploy an LLM inference endpoint.\n\nAutomatically configures the job definition for the specified framework\n(vLLM, Ollama, or LMDeploy).","operationId":"deploy_llm_inference_nosana_deployments_llm_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LLMInferenceJobCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/nosana/deployments/image-generation":{"post":{"tags":["nosana"],"summary":"Deploy Image Generation","description":"Quick deploy a Stable Diffusion image generation endpoint.","operationId":"deploy_image_generation_nosana_deployments_image_generation_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageGenerationJobCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/nosana/deployments/whisper":{"post":{"tags":["nosana"],"summary":"Deploy Whisper Transcription","description":"Quick deploy a Whisper audio transcription endpoint.","operationId":"deploy_whisper_transcription_nosana_deployments_whisper_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhisperJobCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/nosana/jobs":{"post":{"tags":["nosana"],"summary":"Create New Job","description":"Create a new job using credits.","operationId":"create_new_job_nosana_jobs_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/nosana/jobs/{job_address}":{"get":{"tags":["nosana"],"summary":"Get Job Details","description":"Get details for a specific job.","operationId":"get_job_details_nosana_jobs__job_address__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_address","in":"path","required":true,"schema":{"type":"string","title":"Job Address"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/nosana/jobs/{job_address}/extend":{"post":{"tags":["nosana"],"summary":"Extend Job Duration","description":"Extend a job's duration.","operationId":"extend_job_duration_nosana_jobs__job_address__extend_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_address","in":"path","required":true,"schema":{"type":"string","title":"Job Address"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobExtend"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/nosana/jobs/{job_address}/stop":{"post":{"tags":["nosana"],"summary":"Stop Running Job","description":"Stop a credit-based job.","operationId":"stop_running_job_nosana_jobs__job_address__stop_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_address","in":"path","required":true,"schema":{"type":"string","title":"Job Address"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/nosana/markets":{"get":{"tags":["nosana"],"summary":"List Gpu Markets","description":"List available GPU markets.\n\nArgs:\n    market_type: Optional filter by type (PREMIUM, COMMUNITY, OTHER)","operationId":"list_gpu_markets_nosana_markets_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"market_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Market Type"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/nosana/markets/{market_id}":{"get":{"tags":["nosana"],"summary":"Get Market Details","description":"Get details for a specific market.","operationId":"get_market_details_nosana_markets__market_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"market_id","in":"path","required":true,"schema":{"type":"string","title":"Market Id"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/nosana/markets/{market_id}/resources":{"get":{"tags":["nosana"],"summary":"Get Market Resource Requirements","description":"Get required resources for a specific market.","operationId":"get_market_resource_requirements_nosana_markets__market_id__resources_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"market_id","in":"path","required":true,"schema":{"type":"string","title":"Market Id"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/nosana/config":{"get":{"tags":["nosana"],"summary":"Get Nosana Config","description":"Get Nosana configuration options.","operationId":"get_nosana_config_nosana_config_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/provider-credits/balance":{"get":{"tags":["provider-credits"],"summary":"Get Provider Credit Balances","description":"Get credit balances for all monitored providers.\n\nThis endpoint checks the current credit balance for all providers\nthat support credit-based billing (e.g., OpenRouter).\n\n**Requires admin role**\n\nReturns:\n    ProviderCreditsResponse with balance information for each provider","operationId":"get_provider_credit_balances_api_provider_credits_balance_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderCreditsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/provider-credits/balance/{provider}":{"get":{"tags":["provider-credits"],"summary":"Get Provider Credit Balance","description":"Get credit balance for a specific provider.\n\n**Requires admin role**\n\nArgs:\n    provider: Provider name (e.g., \"openrouter\")\n\nReturns:\n    ProviderCreditBalance with balance information","operationId":"get_provider_credit_balance_api_provider_credits_balance__provider__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderCreditBalance"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/provider-credits/balance/clear-cache":{"post":{"tags":["provider-credits"],"summary":"Clear Provider Credit Cache","description":"Clear the provider credit balance cache.\n\nThis forces a fresh check on the next balance query.\n\n**Requires admin role**\n\nArgs:\n    provider: Optional provider name to clear cache for. If not provided, clears all.\n\nReturns:\n    Success message","operationId":"clear_provider_credit_cache_api_provider_credits_balance_clear_cache_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Clear Provider Credit Cache Api Provider Credits Balance Clear Cache Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/code-router/settings/options":{"get":{"tags":["code-router"],"summary":"Get Code Router Settings Options","description":"Get available settings options for the code router.\n\nReturns a schema describing all configurable options that can be\nused to build a settings UI.","operationId":"get_code_router_settings_options_code_router_settings_options_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Code Router Settings Options Code Router Settings Options Get"}}}}}}},"/code-router/tiers":{"get":{"tags":["code-router"],"summary":"Get Code Router Tiers","description":"Get information about model tiers.\n\nReturns the tier configuration including models, pricing, and benchmarks.","operationId":"get_code_router_tiers_code_router_tiers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Code Router Tiers Code Router Tiers Get"}}}}}}},"/code-router/test":{"post":{"tags":["code-router"],"summary":"Test Code Routing","description":"Test code routing without making an actual inference call.\n\nThis endpoint allows you to see what model would be selected for a\ngiven prompt without actually running the inference.","operationId":"test_code_routing_code_router_test_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/src__routes__code_router__RouteTestRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/src__routes__code_router__RouteTestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/code-router/settings/validate":{"post":{"tags":["code-router"],"summary":"Validate Code Router Settings","description":"Validate code router settings and return the resulting model string.\n\nUse this to check if settings are valid before saving them.","operationId":"validate_code_router_settings_code_router_settings_validate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SettingsValidationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SettingsValidationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/code-router/stats":{"get":{"tags":["code-router"],"summary":"Get Code Router Stats","description":"Get code router statistics and performance metrics.\n\nReturns information about routing decisions, latency, and savings.","operationId":"get_code_router_stats_code_router_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Code Router Stats Code Router Stats Get"}}}}}}},"/admin/downtime/incidents":{"get":{"tags":["admin","monitoring"],"summary":"List Downtime Incidents","description":"List downtime incidents (admin only).\n\nQuery parameters:\n- limit: Maximum number of incidents to return (1-500, default: 50)\n- status: Filter by status (ongoing, resolved, investigating)\n- severity: Filter by severity (low, medium, high, critical)\n- environment: Filter by environment (production, staging, etc.)\n\nReturns:\n    List of downtime incidents with metadata","operationId":"list_downtime_incidents_admin_downtime_incidents_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(ongoing|resolved|investigating)$"},{"type":"null"}],"title":"Status"}},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(low|medium|high|critical)$"},{"type":"null"}],"title":"Severity"}},{"name":"environment","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Environment"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Downtime Incidents Admin Downtime Incidents Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/downtime/incidents/ongoing":{"get":{"tags":["admin","monitoring"],"summary":"List Ongoing Incidents","description":"List all ongoing downtime incidents (admin only).\n\nReturns:\n    List of ongoing incidents","operationId":"list_ongoing_incidents_admin_downtime_incidents_ongoing_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Ongoing Incidents Admin Downtime Incidents Ongoing Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/downtime/incidents/{incident_id}":{"get":{"tags":["admin","monitoring"],"summary":"Get Downtime Incident","description":"Get details of a specific downtime incident (admin only).\n\nPath parameters:\n- incident_id: UUID of the incident\n\nReturns:\n    Incident details including captured logs","operationId":"get_downtime_incident_admin_downtime_incidents__incident_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"incident_id","in":"path","required":true,"schema":{"type":"string","title":"Incident Id"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Downtime Incident Admin Downtime Incidents  Incident Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/downtime/incidents/{incident_id}/logs":{"get":{"tags":["admin","monitoring"],"summary":"Get Incident Logs","description":"Get logs for a specific downtime incident (admin only).\n\nPath parameters:\n- incident_id: UUID of the incident\n\nQuery parameters:\n- level: Filter by log level (ERROR, WARNING, INFO, DEBUG)\n- logger_name: Filter by logger name (e.g., src.routes.chat)\n- search: Search term in log messages\n\nReturns:\n    Filtered logs for the incident","operationId":"get_incident_logs_admin_downtime_incidents__incident_id__logs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"incident_id","in":"path","required":true,"schema":{"type":"string","title":"Incident Id"}},{"name":"level","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(ERROR|WARNING|INFO|DEBUG)$"},{"type":"null"}],"title":"Level"}},{"name":"logger_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logger Name"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Incident Logs Admin Downtime Incidents  Incident Id  Logs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/downtime/incidents/{incident_id}/analysis":{"get":{"tags":["admin","monitoring"],"summary":"Analyze Incident Logs","description":"Analyze logs for a downtime incident (admin only).\n\nProvides error statistics and patterns.\n\nPath parameters:\n- incident_id: UUID of the incident\n\nReturns:\n    Log analysis including error counts, top errors, etc.","operationId":"analyze_incident_logs_admin_downtime_incidents__incident_id__analysis_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"incident_id","in":"path","required":true,"schema":{"type":"string","title":"Incident Id"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Analyze Incident Logs Admin Downtime Incidents  Incident Id  Analysis Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/downtime/incidents/{incident_id}/capture-logs":{"post":{"tags":["admin","monitoring"],"summary":"Trigger Log Capture","description":"Manually trigger log capture for an ongoing incident (admin only).\n\nPath parameters:\n- incident_id: UUID of the incident\n\nReturns:\n    Log capture results","operationId":"trigger_log_capture_admin_downtime_incidents__incident_id__capture_logs_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"incident_id","in":"path","required":true,"schema":{"type":"string","title":"Incident Id"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Trigger Log Capture Admin Downtime Incidents  Incident Id  Capture Logs Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/downtime/incidents/{incident_id}/resolve":{"post":{"tags":["admin","monitoring"],"summary":"Resolve Downtime Incident","description":"Manually resolve a downtime incident (admin only).\n\nPath parameters:\n- incident_id: UUID of the incident\n\nQuery parameters:\n- notes: Optional resolution notes\n\nReturns:\n    Updated incident","operationId":"resolve_downtime_incident_admin_downtime_incidents__incident_id__resolve_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"incident_id","in":"path","required":true,"schema":{"type":"string","title":"Incident Id"}},{"name":"notes","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Resolve Downtime Incident Admin Downtime Incidents  Incident Id  Resolve Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/downtime/statistics":{"get":{"tags":["admin","monitoring"],"summary":"Get Downtime Statistics","description":"Get downtime statistics (admin only).\n\nQuery parameters:\n- days: Number of days to analyze (1-365, default: 30)\n\nReturns:\n    Statistics including incident counts, total downtime, etc.","operationId":"get_downtime_statistics_admin_downtime_statistics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":30,"title":"Days"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Downtime Statistics Admin Downtime Statistics Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/user/memory":{"get":{"tags":["User Memory"],"summary":"List Memory","description":"List the caller's memory items (highest salience first).","operationId":"list_memory_user_memory_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["User Memory"],"summary":"Create Memory","description":"Add a memory item for the caller.","operationId":"create_memory_user_memory_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["User Memory"],"summary":"Clear Memory","description":"Delete all of the caller's memory items.","operationId":"clear_memory_user_memory_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/user/memory/{memory_id}":{"delete":{"tags":["User Memory"],"summary":"Remove Memory","description":"Delete one of the caller's memory items.","operationId":"remove_memory_user_memory__memory_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"integer","title":"Memory Id"}},{"name":"log_security_violations","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Log Security Violations"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/monitoring":{"post":{"tags":["sentry-tunnel"],"summary":"Sentry Tunnel","description":"Sentry tunnel endpoint for frontend error tracking.\n\nThis endpoint acts as a proxy to forward Sentry events from the frontend\nto Sentry's ingestion endpoint. This helps bypass ad blockers that might\nblock direct requests to sentry.io.\n\nThe frontend Sentry SDK should be configured with:\n```javascript\nSentry.init({\n  dsn: \"your-dsn\",\n  tunnel: \"/monitoring\",\n});\n```\n\nNo authentication required - this is intentionally public to allow\nfrontend error tracking without exposing API keys.","operationId":"sentry_tunnel_monitoring_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/prometheus/datasource":{"get":{"tags":["prometheus-grafana"],"summary":"Health Check","description":"Health check endpoint for Grafana SimpleJSON datasource.\n\nReturns 200 OK if the datasource is available.","operationId":"health_check_prometheus_datasource_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/prometheus/datasource/search":{"post":{"tags":["prometheus-grafana"],"summary":"Search","description":"Return list of available metrics for Grafana metric selection.\n\nThis endpoint is called when users open a panel to select metrics.","operationId":"search_prometheus_datasource_search_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/prometheus/datasource/query":{"post":{"tags":["prometheus-grafana"],"summary":"Query","description":"Query metrics data for Grafana panels.\n\nThis is the main endpoint that fetches actual metric values.\n\nArgs:\n    request: Query request containing targets and time range\n\nReturns:\n    List of QueryResponse objects with metric data","operationId":"query_prometheus_datasource_query_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/prometheus/datasource/annotations":{"post":{"tags":["prometheus-grafana"],"summary":"Annotations","description":"Return annotations for Grafana.\n\nNot implemented - returns empty list.","operationId":"annotations_prometheus_datasource_annotations_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/prometheus/datasource/tag-keys":{"post":{"tags":["prometheus-grafana"],"summary":"Tag Keys","description":"Return available tag keys.\n\nNot implemented - returns empty list.","operationId":"tag_keys_prometheus_datasource_tag_keys_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/prometheus/datasource/tag-values":{"post":{"tags":["prometheus-grafana"],"summary":"Tag Values","description":"Return available tag values.\n\nNot implemented - returns empty list.","operationId":"tag_values_prometheus_datasource_tag_values_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/general-router/settings/options":{"get":{"tags":["general-router"],"summary":"Get General Router Settings Options","description":"Get available settings options for general router.\n\nReturns configuration schema for UI builders and client applications.","operationId":"get_general_router_settings_options_general_router_settings_options_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get General Router Settings Options General Router Settings Options Get"}}}}}}},"/general-router/models":{"get":{"tags":["general-router"],"summary":"Get Available Models","description":"Get models used by the general router.\n\nReturns the per-mode fallback model configuration the router selects from.","operationId":"get_available_models_general_router_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Available Models General Router Models Get"}}}}}}},"/general-router/test":{"post":{"tags":["general-router"],"summary":"Test General Routing","description":"Test routing without making inference call.\n\nUseful for debugging and validating routing decisions before actual inference.","operationId":"test_general_routing_general_router_test_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/src__schemas__general_router__RouteTestRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/src__schemas__general_router__RouteTestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/general-router/stats":{"get":{"tags":["general-router"],"summary":"Get General Router Stats","description":"Get general router statistics.\n\nReturns configuration and status information about the general router.","operationId":"get_general_router_stats_general_router_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get General Router Stats General Router Stats Get"}}}}}}},"/general-router/fallback-models":{"get":{"tags":["general-router"],"summary":"Get Fallback Models","description":"Get fallback models configuration.\n\nReturns the fallback model for each routing mode.","operationId":"get_fallback_models_general_router_fallback_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Fallback Models General Router Fallback Models Get"}}}}}}},"/circuit-breakers":{"get":{"tags":["circuit-breakers","monitoring"],"summary":"Get All Circuit Breaker States","description":"Get current state of all circuit breakers.\n\nReturns a dictionary mapping provider names to their circuit breaker states.\n\nExample response:\n```json\n{\n    \"openrouter\": {\n        \"provider\": \"openrouter\",\n        \"state\": \"closed\",\n        \"failure_count\": 0,\n        \"success_count\": 15,\n        \"failure_rate\": 0.0,\n        \"recent_requests\": 15,\n        \"opened_at\": null,\n        \"seconds_until_retry\": 0\n    },\n    \"groq\": {\n        \"provider\": \"groq\",\n        \"state\": \"open\",\n        \"failure_count\": 5,\n        \"success_count\": 0,\n        \"failure_rate\": 1.0,\n        \"recent_requests\": 5,\n        \"opened_at\": \"2026-02-03T10:30:00Z\",\n        \"seconds_until_retry\": 45\n    }\n}\n```","operationId":"get_all_circuit_breaker_states_circuit_breakers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get All Circuit Breaker States Circuit Breakers Get"}}}}}}},"/circuit-breakers/{provider}":{"get":{"tags":["circuit-breakers","monitoring"],"summary":"Get Circuit Breaker State","description":"Get current state of a specific provider's circuit breaker.\n\nArgs:\n    provider: Provider name (e.g., 'openrouter', 'groq')\n\nReturns:\n    Circuit breaker state information\n\nExample response:\n```json\n{\n    \"provider\": \"openrouter\",\n    \"state\": \"closed\",\n    \"failure_count\": 0,\n    \"success_count\": 15,\n    \"failure_rate\": 0.0,\n    \"recent_requests\": 15,\n    \"opened_at\": null,\n    \"seconds_until_retry\": 0\n}\n```","operationId":"get_circuit_breaker_state_circuit_breakers__provider__get","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Circuit Breaker State Circuit Breakers  Provider  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/circuit-breakers/{provider}/reset":{"post":{"tags":["circuit-breakers","monitoring"],"summary":"Reset Provider Circuit Breaker","description":"Manually reset a circuit breaker to CLOSED state.\n\nThis can be used when you know a provider has recovered and want to\nimmediately resume sending traffic to it.\n\nArgs:\n    provider: Provider name (e.g., 'openrouter', 'groq')\n\nReturns:\n    Success status and new circuit breaker state\n\nExample response:\n```json\n{\n    \"success\": true,\n    \"message\": \"Circuit breaker for 'openrouter' has been reset\",\n    \"state\": {\n        \"provider\": \"openrouter\",\n        \"state\": \"closed\",\n        \"failure_count\": 0,\n        \"success_count\": 0,\n        ...\n    }\n}\n```","operationId":"reset_provider_circuit_breaker_circuit_breakers__provider__reset_post","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Reset Provider Circuit Breaker Circuit Breakers  Provider  Reset Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/circuit-breakers/reset-all":{"post":{"tags":["circuit-breakers","monitoring"],"summary":"Reset All Provider Circuit Breakers","description":"Manually reset all circuit breakers to CLOSED state.\n\nThis is a bulk operation that resets all provider circuit breakers.\nUse with caution - only reset when you're confident all providers have recovered.\n\nReturns:\n    Success status and count of reset circuit breakers\n\nExample response:\n```json\n{\n    \"success\": true,\n    \"message\": \"All circuit breakers have been reset\",\n    \"reset_count\": 3,\n    \"states\": {\n        \"openrouter\": {...},\n        \"groq\": {...},\n        \"together\": {...}\n    }\n}\n```","operationId":"reset_all_provider_circuit_breakers_circuit_breakers_reset_all_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Reset All Provider Circuit Breakers Circuit Breakers Reset All Post"}}}}}}}},"components":{"schemas":{"AddCreditsRequest":{"properties":{"api_key":{"type":"string","title":"Api Key"},"credits":{"type":"integer","title":"Credits"},"reason":{"type":"string","minLength":10,"title":"Reason","description":"Required reason for the credit grant (min 10 characters)"}},"type":"object","required":["api_key","credits","reason"],"title":"AddCreditsRequest","description":"Request to add credits (admin)"},"AdminRateLimitUpdateRequest":{"properties":{"api_key":{"type":"string","title":"Api Key","description":"User's API key"},"config":{"$ref":"#/components/schemas/RateLimitConfigRequest","description":"Rate limit configuration"}},"type":"object","required":["api_key","config"],"title":"AdminRateLimitUpdateRequest","description":"Request to update rate limits for a user"},"AnalyticsEvent":{"properties":{"event_name":{"type":"string","title":"Event Name","description":"Event name (e.g., 'chat_message_sent')"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id","description":"User ID (optional, will use authenticated user if not provided)"},"value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value","description":"Optional event value"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Optional event metadata"}},"type":"object","required":["event_name"],"title":"AnalyticsEvent","description":"Analytics event model"},"AssignPlanRequest":{"properties":{"user_id":{"type":"integer","title":"User Id"},"plan_id":{"type":"integer","title":"Plan Id"},"duration_months":{"type":"integer","title":"Duration Months","default":1}},"type":"object","required":["user_id","plan_id"],"title":"AssignPlanRequest"},"AuthMethod":{"type":"string","enum":["email","phone","wallet","google","github"],"title":"AuthMethod"},"AvailabilityStatus":{"type":"string","enum":["available","unavailable","degraded","maintenance","unknown"],"title":"AvailabilityStatus","description":"Model availability status"},"AvailableCouponResponse":{"properties":{"coupon_id":{"type":"integer","title":"Coupon Id"},"code":{"type":"string","title":"Code"},"value_usd":{"type":"number","title":"Value Usd"},"coupon_scope":{"type":"string","title":"Coupon Scope"},"coupon_type":{"type":"string","title":"Coupon Type"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"valid_until":{"type":"string","format":"date-time","title":"Valid Until"},"remaining_uses":{"type":"integer","title":"Remaining Uses"}},"type":"object","required":["coupon_id","code","value_usd","coupon_scope","coupon_type","description","valid_until","remaining_uses"],"title":"AvailableCouponResponse","description":"Available coupon for user response"},"BatchMessageRequest":{"properties":{"messages":{"items":{"$ref":"#/components/schemas/SaveChatMessageRequest"},"type":"array","title":"Messages"}},"type":"object","required":["messages"],"title":"BatchMessageRequest","description":"Request model for batch message save"},"BestWorstCohort":{"properties":{"label":{"type":"string","title":"Label"},"conversion_rate":{"type":"number","title":"Conversion Rate"}},"type":"object","required":["label","conversion_rate"],"title":"BestWorstCohort","description":"Best or worst performing cohort"},"Body_create_transcription_base64_v1_audio_transcriptions_base64_post":{"properties":{"audio_data":{"type":"string","title":"Audio Data","description":"Base64-encoded audio data"},"content_type":{"type":"string","title":"Content Type","description":"MIME type of the audio (e.g., 'audio/webm', 'audio/wav')","default":"audio/webm"},"model":{"type":"string","title":"Model","default":"whisper-1"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"},"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt"},"response_format":{"type":"string","title":"Response Format","default":"json"},"temperature":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Temperature","default":0.0}},"type":"object","required":["audio_data"],"title":"Body_create_transcription_base64_v1_audio_transcriptions_base64_post"},"Body_create_transcription_v1_audio_transcriptions_post":{"properties":{"file":{"type":"string","format":"binary","title":"File","description":"Audio file to transcribe"},"model":{"type":"string","title":"Model","description":"Model to use for transcription (whisper-1, whisper-large-v3, etc.)","default":"whisper-1"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language","description":"Language of the audio in ISO-639-1 format (e.g., 'en', 'es', 'fr'). Providing this improves accuracy and speed."},"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt","description":"Optional text to guide the model's style or continue a previous segment. Useful for domain-specific vocabulary or maintaining context."},"response_format":{"type":"string","title":"Response Format","description":"Output format: 'json', 'text', 'srt', 'verbose_json', or 'vtt'","default":"json"},"temperature":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Temperature","description":"Sampling temperature (0-1). Lower values are more deterministic.","default":0.0}},"type":"object","required":["file"],"title":"Body_create_transcription_v1_audio_transcriptions_post"},"BulkCreditAddRequest":{"properties":{"user_ids":{"items":{"type":"integer"},"type":"array","maxItems":100,"minItems":1,"title":"User Ids","description":"List of user IDs (max 100)"},"amount":{"type":"number","exclusiveMinimum":0.0,"title":"Amount","description":"Amount of credits to add to each user"},"reason":{"type":"string","minLength":10,"title":"Reason","description":"Required reason for the bulk credit grant (min 10 characters)"},"description":{"type":"string","title":"Description","description":"Description for the transactions","default":"Bulk credit addition"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Optional metadata"}},"type":"object","required":["user_ids","amount","reason"],"title":"BulkCreditAddRequest","description":"Request to add credits to multiple users"},"BulkCreditResponse":{"properties":{"status":{"type":"string","title":"Status"},"message":{"type":"string","title":"Message"},"total_users":{"type":"integer","title":"Total Users"},"successful":{"type":"integer","title":"Successful"},"failed":{"type":"integer","title":"Failed"},"amount_per_user":{"type":"number","title":"Amount Per User"},"total_credits_added":{"type":"number","title":"Total Credits Added"},"results":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Results"},"timestamp":{"type":"string","title":"Timestamp"}},"type":"object","required":["status","message","total_users","successful","failed","amount_per_user","total_credits_added","results","timestamp"],"title":"BulkCreditResponse","description":"Response for bulk credit operations"},"CancelSubscriptionRequest":{"properties":{"cancel_at_period_end":{"type":"boolean","title":"Cancel At Period End","description":"If True, subscription remains active until the end of the billing period. If False, cancels immediately.","default":true},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason","description":"Optional cancellation reason"}},"type":"object","title":"CancelSubscriptionRequest","description":"Request to cancel subscription"},"ChatMessage":{"properties":{"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id"},"session_id":{"type":"integer","title":"Session Id"},"role":{"type":"string","title":"Role"},"content":{"type":"string","title":"Content"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tokens","default":0},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["session_id","role","content"],"title":"ChatMessage"},"ChatSession":{"properties":{"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id"},"user_id":{"type":"integer","title":"User Id"},"title":{"type":"string","title":"Title"},"model":{"type":"string","title":"Model"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active","default":true},"messages":{"anyOf":[{"items":{"$ref":"#/components/schemas/ChatMessage"},"type":"array"},{"type":"null"}],"title":"Messages","default":[]}},"type":"object","required":["user_id","title","model"],"title":"ChatSession"},"ChatSessionResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"data":{"anyOf":[{"$ref":"#/components/schemas/ChatSession"},{"type":"null"}]},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["success"],"title":"ChatSessionResponse"},"ChatSessionStatsResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"stats":{"additionalProperties":true,"type":"object","title":"Stats"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["success","stats"],"title":"ChatSessionStatsResponse"},"ChatSessionsListResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"data":{"items":{"$ref":"#/components/schemas/ChatSession"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["success","data","count"],"title":"ChatSessionsListResponse"},"CheckIPWhitelistRequest":{"properties":{"ip_address":{"type":"string","title":"Ip Address","description":"IP address to check","example":"182.160.0.40"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id","description":"Optional user ID to check user-specific whitelists"}},"type":"object","required":["ip_address"],"title":"CheckIPWhitelistRequest","description":"Request to check if an IP is whitelisted"},"CheckIPWhitelistResponse":{"properties":{"ip_address":{"type":"string","title":"Ip Address"},"is_whitelisted":{"type":"boolean","title":"Is Whitelisted"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"}},"type":"object","required":["ip_address","is_whitelisted"],"title":"CheckIPWhitelistResponse","description":"Response for IP whitelist check"},"CircuitBreakerResponse":{"properties":{"provider":{"type":"string","title":"Provider"},"model":{"type":"string","title":"Model"},"state":{"type":"string","title":"State","description":"CLOSED, OPEN, HALF_OPEN"},"failure_count":{"type":"integer","title":"Failure Count"},"is_available":{"type":"boolean","title":"Is Available"},"last_updated":{"type":"number","title":"Last Updated"}},"type":"object","required":["provider","model","state","failure_count","is_available","last_updated"],"title":"CircuitBreakerResponse","description":"Circuit breaker state response"},"CircuitBreakerState":{"type":"string","enum":["closed","open","half_open"],"title":"CircuitBreakerState","description":"Circuit breaker states"},"CohortAnalysisResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"cohorts":{"items":{"$ref":"#/components/schemas/CohortData"},"type":"array","title":"Cohorts"},"summary":{"$ref":"#/components/schemas/CohortSummary"}},"type":"object","required":["cohorts","summary"],"title":"CohortAnalysisResponse","description":"Response for GET /admin/trial/cohort-analysis"},"CohortData":{"properties":{"cohort_label":{"type":"string","title":"Cohort Label"},"cohort_start_date":{"type":"string","title":"Cohort Start Date"},"cohort_end_date":{"type":"string","title":"Cohort End Date"},"total_trials":{"type":"integer","title":"Total Trials"},"converted_trials":{"type":"integer","title":"Converted Trials"},"conversion_rate":{"type":"number","title":"Conversion Rate"},"avg_days_to_convert":{"type":"number","title":"Avg Days To Convert"},"avg_requests_at_signup":{"type":"number","title":"Avg Requests At Signup"},"avg_tokens_at_signup":{"type":"number","title":"Avg Tokens At Signup"}},"type":"object","required":["cohort_label","cohort_start_date","cohort_end_date","total_trials","converted_trials","conversion_rate","avg_days_to_convert","avg_requests_at_signup","avg_tokens_at_signup"],"title":"CohortData","description":"Data for a single cohort period"},"CohortSummary":{"properties":{"total_cohorts":{"type":"integer","title":"Total Cohorts"},"overall_conversion_rate":{"type":"number","title":"Overall Conversion Rate"},"best_cohort":{"$ref":"#/components/schemas/BestWorstCohort"},"worst_cohort":{"$ref":"#/components/schemas/BestWorstCohort"}},"type":"object","required":["total_cohorts","overall_conversion_rate","best_cohort","worst_cohort"],"title":"CohortSummary","description":"Summary statistics across all cohorts"},"ConversionBreakdown":{"properties":{"converted_before_10_requests":{"type":"integer","title":"Converted Before 10 Requests"},"converted_between_10_50_requests":{"type":"integer","title":"Converted Between 10 50 Requests"},"converted_between_50_100_requests":{"type":"integer","title":"Converted Between 50 100 Requests"},"converted_after_100_requests":{"type":"integer","title":"Converted After 100 Requests"}},"type":"object","required":["converted_before_10_requests","converted_between_10_50_requests","converted_between_50_100_requests","converted_after_100_requests"],"title":"ConversionBreakdown","description":"Breakdown of when users converted"},"ConversionFunnelData":{"properties":{"total_trials_started":{"type":"integer","title":"Total Trials Started"},"completed_onboarding":{"type":"integer","title":"Completed Onboarding"},"made_first_request":{"type":"integer","title":"Made First Request"},"made_10_requests":{"type":"integer","title":"Made 10 Requests"},"made_50_requests":{"type":"integer","title":"Made 50 Requests"},"made_100_requests":{"type":"integer","title":"Made 100 Requests"},"converted_to_paid":{"type":"integer","title":"Converted To Paid"},"conversion_breakdown":{"$ref":"#/components/schemas/ConversionBreakdown"},"avg_requests_at_conversion":{"type":"number","title":"Avg Requests At Conversion"},"median_requests_at_conversion":{"type":"integer","title":"Median Requests At Conversion"},"avg_tokens_at_conversion":{"type":"number","title":"Avg Tokens At Conversion"},"median_tokens_at_conversion":{"type":"integer","title":"Median Tokens At Conversion"}},"type":"object","required":["total_trials_started","completed_onboarding","made_first_request","made_10_requests","made_50_requests","made_100_requests","converted_to_paid","conversion_breakdown","avg_requests_at_conversion","median_requests_at_conversion","avg_tokens_at_conversion","median_tokens_at_conversion"],"title":"ConversionFunnelData","description":"Conversion funnel statistics"},"ConversionFunnelResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"funnel":{"$ref":"#/components/schemas/ConversionFunnelData"}},"type":"object","required":["funnel"],"title":"ConversionFunnelResponse","description":"Response for GET /admin/trial/conversion-funnel"},"CouponAnalyticsResponse":{"properties":{"coupon":{"$ref":"#/components/schemas/CouponResponse"},"total_redemptions":{"type":"integer","title":"Total Redemptions"},"unique_users":{"type":"integer","title":"Unique Users"},"total_value_distributed":{"type":"number","title":"Total Value Distributed"},"redemption_rate":{"type":"number","title":"Redemption Rate"},"remaining_uses":{"type":"integer","title":"Remaining Uses"},"is_expired":{"type":"boolean","title":"Is Expired"}},"type":"object","required":["coupon","total_redemptions","unique_users","total_value_distributed","redemption_rate","remaining_uses","is_expired"],"title":"CouponAnalyticsResponse","description":"Coupon analytics response"},"CouponResponse":{"properties":{"id":{"type":"integer","title":"Id"},"code":{"type":"string","title":"Code"},"value_usd":{"type":"number","title":"Value Usd"},"coupon_scope":{"type":"string","title":"Coupon Scope"},"coupon_type":{"type":"string","title":"Coupon Type"},"max_uses":{"type":"integer","title":"Max Uses"},"times_used":{"type":"integer","title":"Times Used"},"valid_from":{"type":"string","format":"date-time","title":"Valid From"},"valid_until":{"type":"string","format":"date-time","title":"Valid Until"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"assigned_to_user_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Assigned To User Id"},"created_by":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Created By"},"created_by_type":{"type":"string","title":"Created By Type"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["id","code","value_usd","coupon_scope","coupon_type","max_uses","times_used","valid_from","valid_until","is_active","created_at","created_by_type"],"title":"CouponResponse","description":"Coupon details response"},"CouponScope":{"type":"string","enum":["user_specific","global"],"title":"CouponScope","description":"Coupon scope types"},"CouponStatsResponse":{"properties":{"total_coupons":{"type":"integer","title":"Total Coupons"},"active_coupons":{"type":"integer","title":"Active Coupons"},"user_specific_coupons":{"type":"integer","title":"User Specific Coupons"},"global_coupons":{"type":"integer","title":"Global Coupons"},"total_redemptions":{"type":"integer","title":"Total Redemptions"},"unique_redeemers":{"type":"integer","title":"Unique Redeemers"},"total_value_distributed":{"type":"number","title":"Total Value Distributed"},"average_redemption_value":{"type":"number","title":"Average Redemption Value"}},"type":"object","required":["total_coupons","active_coupons","user_specific_coupons","global_coupons","total_redemptions","unique_redeemers","total_value_distributed","average_redemption_value"],"title":"CouponStatsResponse","description":"System-wide coupon statistics"},"CouponType":{"type":"string","enum":["promotional","referral","compensation","partnership"],"title":"CouponType","description":"Coupon type categories"},"CreateApiKeyRequest":{"properties":{"key_name":{"type":"string","title":"Key Name"},"environment_tag":{"type":"string","title":"Environment Tag","default":"live"},"scope_permissions":{"anyOf":[{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object"},{"type":"null"}],"title":"Scope Permissions"},"expiration_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expiration Days"},"max_requests":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Requests"},"ip_allowlist":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Ip Allowlist"},"domain_referrers":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Domain Referrers"},"action":{"type":"string","title":"Action","default":"create"}},"type":"object","required":["key_name"],"title":"CreateApiKeyRequest"},"CreateChatSessionRequest":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"}},"type":"object","title":"CreateChatSessionRequest"},"CreateCheckoutSessionRequest":{"properties":{"amount":{"type":"integer","exclusiveMinimum":0.0,"title":"Amount","description":"Amount in cents (e.g., 2999 for $29.99)"},"credit_value":{"anyOf":[{"type":"number","maximum":10000.0,"exclusiveMinimum":0.0},{"type":"null"}],"title":"Credit Value","description":"Credit value in dollars to add (for discounted packages). If not provided, amount/100 is used."},"currency":{"$ref":"#/components/schemas/StripeCurrency","default":"usd"},"success_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Success Url","description":"URL to redirect on success"},"cancel_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancel Url","description":"URL to redirect on cancel"},"customer_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customer Email"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","default":"Gatewayz Credits Purchase"}},"type":"object","required":["amount"],"title":"CreateCheckoutSessionRequest","description":"Request to create a Stripe checkout session"},"CreateCouponRequest":{"properties":{"code":{"type":"string","maxLength":50,"minLength":3,"title":"Code","description":"Unique coupon code"},"value_usd":{"type":"number","maximum":1000.0,"exclusiveMinimum":0.0,"title":"Value Usd","description":"Dollar value of the coupon"},"coupon_scope":{"$ref":"#/components/schemas/CouponScope","description":"Scope: user_specific or global"},"max_uses":{"type":"integer","exclusiveMinimum":0.0,"title":"Max Uses","description":"Maximum number of redemptions"},"valid_until":{"type":"string","format":"date-time","title":"Valid Until","description":"Expiration date"},"coupon_type":{"$ref":"#/components/schemas/CouponType","description":"Type of coupon","default":"promotional"},"assigned_to_user_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Assigned To User Id","description":"User ID for user-specific coupons"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description","description":"Internal description"},"valid_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Valid From","description":"Start date (defaults to now)"}},"type":"object","required":["code","value_usd","coupon_scope","max_uses","valid_until"],"title":"CreateCouponRequest","description":"Request to create a new coupon"},"CreatePaymentIntentRequest":{"properties":{"amount":{"type":"integer","exclusiveMinimum":0.0,"title":"Amount","description":"Amount in cents"},"currency":{"$ref":"#/components/schemas/StripeCurrency","default":"usd"},"payment_method_types":{"items":{"$ref":"#/components/schemas/StripePaymentMethodType"},"type":"array","title":"Payment Method Types","default":["card"]},"customer_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customer Email"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","default":"Gatewayz Credits"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"},"automatic_payment_methods":{"type":"boolean","title":"Automatic Payment Methods","default":true}},"type":"object","required":["amount"],"title":"CreatePaymentIntentRequest","description":"Request to create a Stripe payment intent"},"CreateRefundRequest":{"properties":{"payment_intent_id":{"type":"string","title":"Payment Intent Id"},"amount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Amount","description":"Amount to refund in cents"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason","description":"Reason for refund"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"}},"type":"object","required":["payment_intent_id"],"title":"CreateRefundRequest","description":"Request to create a refund"},"CreateShareLinkRequest":{"properties":{"session_id":{"type":"integer","title":"Session Id"},"expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expires At"}},"type":"object","required":["session_id"],"title":"CreateShareLinkRequest","description":"Request to create a share link."},"CreateShareLinkResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id"},"session_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Session Id"},"share_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Share Token"},"created_by_user_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Created By User Id"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expires At"},"view_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"View Count"},"last_viewed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Viewed At"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["success"],"title":"CreateShareLinkResponse","description":"Response from creating a share link."},"CreateSubscriptionCheckoutRequest":{"properties":{"price_id":{"type":"string","title":"Price Id","description":"Stripe price ID (e.g., price_1SNk2KLVT8n4vaEn7lHNPYWB)"},"product_id":{"type":"string","title":"Product Id","description":"Stripe product ID (e.g., prod_TKOqQPhVRxNp4Q)"},"customer_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customer Email","description":"Customer email address"},"success_url":{"type":"string","title":"Success Url","description":"URL to redirect on successful subscription"},"cancel_url":{"type":"string","title":"Cancel Url","description":"URL to redirect on canceled subscription"},"mode":{"type":"string","title":"Mode","description":"Checkout mode (subscription, payment, or setup)","default":"subscription"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Additional metadata"}},"type":"object","required":["price_id","product_id","success_url","cancel_url"],"title":"CreateSubscriptionCheckoutRequest","description":"Request to create a Stripe subscription checkout session"},"CreateWhitelistRequest":{"properties":{"ip_address":{"type":"string","title":"Ip Address","description":"IP address or CIDR range (e.g., '203.0.113.5' or '203.0.113.0/24')","example":"182.160.0.40"},"reason":{"type":"string","title":"Reason","description":"Reason for whitelisting this IP","example":"Known good client experiencing false positives"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id","description":"Optional user ID to associate with (null = global whitelist)"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At","description":"Optional expiration datetime (null = never expires)"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Additional context data"}},"type":"object","required":["ip_address","reason"],"title":"CreateWhitelistRequest","description":"Request to create a new IP whitelist entry"},"CreditAddRequest":{"properties":{"user_id":{"type":"integer","title":"User Id","description":"User ID to add credits to"},"amount":{"type":"number","exclusiveMinimum":0.0,"title":"Amount","description":"Amount of credits to add (must be positive)"},"reason":{"type":"string","minLength":10,"title":"Reason","description":"Required reason for the credit grant (min 10 characters)"},"description":{"type":"string","title":"Description","description":"Description for the transaction","default":"Admin credit addition"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Optional metadata"}},"type":"object","required":["user_id","amount","reason"],"title":"CreditAddRequest","description":"Request to add credits to a user"},"CreditAdjustRequest":{"properties":{"user_id":{"type":"integer","title":"User Id","description":"User ID to adjust credits for"},"amount":{"type":"number","title":"Amount","description":"Amount to adjust (positive to add, negative to remove)"},"description":{"type":"string","title":"Description","description":"Description for the transaction","default":"Admin credit adjustment"},"reason":{"type":"string","minLength":10,"title":"Reason","description":"Required reason for the adjustment (min 10 characters)"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Optional metadata"}},"type":"object","required":["user_id","amount","reason"],"title":"CreditAdjustRequest","description":"Request to adjust credits (add or remove)"},"CreditRefundRequest":{"properties":{"user_id":{"type":"integer","title":"User Id","description":"User ID to refund credits to"},"amount":{"type":"number","exclusiveMinimum":0.0,"title":"Amount","description":"Amount of credits to refund"},"original_transaction_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Original Transaction Id","description":"Original transaction ID being refunded"},"reason":{"type":"string","title":"Reason","description":"Reason for the refund","default":"Refund"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Optional metadata"}},"type":"object","required":["user_id","amount"],"title":"CreditRefundRequest","description":"Request to refund credits to a user"},"CreditResponse":{"properties":{"status":{"type":"string","title":"Status"},"message":{"type":"string","title":"Message"},"user_id":{"type":"integer","title":"User Id"},"previous_balance":{"type":"number","title":"Previous Balance"},"new_balance":{"type":"number","title":"New Balance"},"amount_changed":{"type":"number","title":"Amount Changed"},"transaction_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Transaction Id"},"timestamp":{"type":"string","title":"Timestamp"}},"type":"object","required":["status","message","user_id","previous_balance","new_balance","amount_changed","timestamp"],"title":"CreditResponse","description":"Standard credit operation response"},"CreditsBalanceResponse":{"properties":{"assignedCredits":{"type":"number","title":"Assignedcredits"},"reservedCredits":{"type":"number","title":"Reservedcredits"},"settledCredits":{"type":"number","title":"Settledcredits"}},"type":"object","required":["assignedCredits","reservedCredits","settledCredits"],"title":"CreditsBalanceResponse","description":"Response model for credit balance"},"DeleteAccountRequest":{"properties":{"confirmation":{"type":"string","title":"Confirmation"}},"type":"object","required":["confirmation"],"title":"DeleteAccountRequest"},"DeleteAccountResponse":{"properties":{"status":{"type":"string","title":"Status"},"message":{"type":"string","title":"Message"},"user_id":{"anyOf":[{"type":"integer"},{"type":"string"}],"title":"User Id"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp"}},"type":"object","required":["status","message","user_id","timestamp"],"title":"DeleteAccountResponse"},"DeleteApiKeyRequest":{"properties":{"confirmation":{"type":"string","title":"Confirmation","default":"DELETE"}},"type":"object","title":"DeleteApiKeyRequest"},"DeploymentCreate":{"properties":{"name":{"type":"string","title":"Name","description":"Unique identifier for the deployment"},"market":{"type":"string","title":"Market","description":"GPU market address"},"job_definition":{"additionalProperties":true,"type":"object","title":"Job Definition","description":"Container workload specification"},"timeout":{"type":"integer","maximum":360000.0,"minimum":60.0,"title":"Timeout","description":"Duration in seconds","default":3600},"replicas":{"type":"integer","minimum":1.0,"title":"Replicas","description":"Number of instances","default":1},"strategy":{"type":"string","title":"Strategy","description":"Deployment strategy","default":"SIMPLE"}},"type":"object","required":["name","market","job_definition"],"title":"DeploymentCreate","description":"Request model for creating a deployment"},"DeploymentReplicaUpdate":{"properties":{"replica_count":{"type":"integer","minimum":1.0,"title":"Replica Count","description":"New number of replicas"}},"type":"object","required":["replica_count"],"title":"DeploymentReplicaUpdate","description":"Request model for updating deployment replicas"},"DeploymentRevisionCreate":{"properties":{"job_definition":{"additionalProperties":true,"type":"object","title":"Job Definition","description":"New container workload specification"}},"type":"object","required":["job_definition"],"title":"DeploymentRevisionCreate","description":"Request model for creating a deployment revision"},"DomainAnalysis":{"properties":{"domain":{"type":"string","title":"Domain"},"total_users":{"type":"integer","title":"Total Users"},"active_trials":{"type":"integer","title":"Active Trials"},"expired_trials":{"type":"integer","title":"Expired Trials"},"converted_trials":{"type":"integer","title":"Converted Trials"},"conversion_rate":{"type":"number","title":"Conversion Rate"},"total_requests":{"type":"integer","title":"Total Requests"},"total_tokens":{"type":"integer","title":"Total Tokens"},"total_credits_used":{"type":"number","title":"Total Credits Used"},"avg_requests_per_user":{"type":"number","title":"Avg Requests Per User"},"avg_tokens_per_user":{"type":"number","title":"Avg Tokens Per User"},"abuse_score":{"type":"number","title":"Abuse Score"},"flagged":{"type":"boolean","title":"Flagged"}},"type":"object","required":["domain","total_users","active_trials","expired_trials","converted_trials","conversion_rate","total_requests","total_tokens","total_credits_used","avg_requests_per_user","avg_tokens_per_user","abuse_score","flagged"],"title":"DomainAnalysis","description":"Analysis data for a specific email domain"},"DomainAnalysisResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"domains":{"items":{"$ref":"#/components/schemas/DomainAnalysis"},"type":"array","title":"Domains"},"suspicious_domains":{"items":{"type":"string"},"type":"array","title":"Suspicious Domains"}},"type":"object","required":["domains","suspicious_domains"],"title":"DomainAnalysisResponse","description":"Response for GET /admin/trial/domain-analysis"},"DowngradeSubscriptionRequest":{"properties":{"new_price_id":{"type":"string","title":"New Price Id","description":"Stripe price ID for the new plan"},"new_product_id":{"type":"string","title":"New Product Id","description":"Stripe product ID for the new plan"},"proration_behavior":{"type":"string","title":"Proration Behavior","description":"How to handle proration: create_prorations (credits unused time), always_invoice, or none","default":"create_prorations"}},"type":"object","required":["new_price_id","new_product_id"],"title":"DowngradeSubscriptionRequest","description":"Request to downgrade subscription (e.g., Max -> Pro)"},"ErrorResponse":{"properties":{"model":{"type":"string","title":"Model"},"error":{"type":"string","title":"Error"},"timestamp":{"type":"number","title":"Timestamp"},"latency_ms":{"type":"integer","title":"Latency Ms"}},"type":"object","required":["model","error","timestamp","latency_ms"],"title":"ErrorResponse","description":"Error entry response"},"FeedbackStatsResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"stats":{"additionalProperties":true,"type":"object","title":"Stats"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["success","stats"],"title":"FeedbackStatsResponse"},"GatewayUptimeData":{"properties":{"gateway":{"type":"string","title":"Gateway","description":"Gateway name (e.g., openrouter, fireworks)"},"uptime_percentage":{"type":"number","title":"Uptime Percentage","description":"Uptime percentage over the period"},"period_label":{"type":"string","title":"Period Label","description":"Human-readable period label"},"last_checked":{"type":"string","format":"date-time","title":"Last Checked","description":"Timestamp of last health check"},"total_providers":{"type":"integer","title":"Total Providers","description":"Total number of providers on this gateway"},"healthy_providers":{"type":"integer","title":"Healthy Providers","description":"Number of healthy providers"},"samples":{"items":{"$ref":"#/components/schemas/UptimeSample"},"type":"array","title":"Samples","description":"Array of uptime samples per time bucket"},"incident_summary":{"$ref":"#/components/schemas/IncidentSummary","description":"Summary of incidents over the period"}},"type":"object","required":["gateway","uptime_percentage","period_label","last_checked","total_providers","healthy_providers","samples","incident_summary"],"title":"GatewayUptimeData","description":"Uptime data for a single gateway"},"GatewayUptimeResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"gateways":{"items":{"$ref":"#/components/schemas/GatewayUptimeData"},"type":"array","title":"Gateways"}},"type":"object","required":["gateways"],"title":"GatewayUptimeResponse","description":"Response for GET /health/gateways/uptime"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HealthCheckRequest":{"properties":{"models":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Models","description":"Specific models to check (optional)"},"providers":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Providers","description":"Specific providers to check (optional)"},"gateways":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Gateways","description":"Specific gateways to check (optional)"},"force_refresh":{"type":"boolean","title":"Force Refresh","description":"Force immediate health check","default":false}},"type":"object","title":"HealthCheckRequest","description":"Request to perform health check"},"HealthDashboardResponse":{"properties":{"system_status":{"$ref":"#/components/schemas/SystemHealthResponse","description":"System status"},"providers":{"items":{"$ref":"#/components/schemas/ProviderStatusResponse"},"type":"array","title":"Providers","description":"Provider statuses"},"models":{"items":{"$ref":"#/components/schemas/ModelStatusResponse"},"type":"array","title":"Models","description":"Model statuses"},"uptime_metrics":{"$ref":"#/components/schemas/UptimeMetricsResponse","description":"Uptime metrics"},"last_updated":{"type":"string","format":"date-time","title":"Last Updated","description":"Last update timestamp"},"monitoring_active":{"type":"boolean","title":"Monitoring Active","description":"Monitoring status","default":false}},"type":"object","required":["system_status","uptime_metrics","last_updated"],"title":"HealthDashboardResponse","description":"Complete health dashboard data"},"HealthResponse":{"properties":{"provider":{"type":"string","title":"Provider"},"health_score":{"type":"number","maximum":100.0,"minimum":0.0,"title":"Health Score","description":"Health score 0-100"},"status":{"type":"string","title":"Status","description":"healthy, degraded, unhealthy"},"last_updated":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Updated"}},"type":"object","required":["provider","health_score","status"],"title":"HealthResponse","description":"Provider health response"},"HealthStatus":{"type":"string","enum":["healthy","degraded","unhealthy","unknown","maintenance"],"title":"HealthStatus","description":"Health status enumeration"},"HealthSummaryResponse":{"properties":{"system":{"anyOf":[{"$ref":"#/components/schemas/SystemHealthResponse"},{"type":"null"}],"description":"System health metrics"},"providers":{"items":{"$ref":"#/components/schemas/ProviderHealthResponse"},"type":"array","title":"Providers","description":"Provider health metrics"},"models":{"items":{"$ref":"#/components/schemas/ModelHealthResponse"},"type":"array","title":"Models","description":"Model health metrics"},"monitoring_active":{"type":"boolean","title":"Monitoring Active","description":"Whether monitoring is active","default":false},"last_check":{"type":"string","format":"date-time","title":"Last Check","description":"Last health check timestamp"}},"type":"object","required":["last_check"],"title":"HealthSummaryResponse","description":"Comprehensive health summary"},"IPAnalysis":{"properties":{"ip_address":{"type":"string","title":"Ip Address"},"total_accounts":{"type":"integer","title":"Total Accounts"},"active_trials":{"type":"integer","title":"Active Trials"},"converted_accounts":{"type":"integer","title":"Converted Accounts"},"total_requests":{"type":"integer","title":"Total Requests"},"total_tokens":{"type":"integer","title":"Total Tokens"},"flagged":{"type":"boolean","title":"Flagged"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","required":["ip_address","total_accounts","active_trials","converted_accounts","total_requests","total_tokens","flagged"],"title":"IPAnalysis","description":"Analysis data for a specific IP address"},"IPAnalysisResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"ips":{"items":{"$ref":"#/components/schemas/IPAnalysis"},"type":"array","title":"Ips"}},"type":"object","required":["ips"],"title":"IPAnalysisResponse","description":"Response for GET /admin/trial/ip-analysis"},"ImageData":{"properties":{"url":{"type":"string","title":"Url"},"b64_json":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"B64 Json"}},"type":"object","required":["url"],"title":"ImageData","description":"Individual image data in response"},"ImageGenerationJobCreate":{"properties":{"name":{"type":"string","title":"Name","description":"Deployment name"},"market":{"type":"string","title":"Market","description":"GPU market address"},"model":{"type":"string","title":"Model","description":"Model checkpoint","default":"stabilityai/stable-diffusion-xl-base-1.0"},"port":{"type":"integer","title":"Port","description":"WebUI port to expose","default":7860},"timeout":{"type":"integer","maximum":360000.0,"minimum":60.0,"title":"Timeout","description":"Deployment timeout in seconds","default":3600},"replicas":{"type":"integer","minimum":1.0,"title":"Replicas","description":"Number of instances","default":1}},"type":"object","required":["name","market"],"title":"ImageGenerationJobCreate","description":"Request model for creating an image generation deployment"},"ImageGenerationRequest":{"properties":{"prompt":{"type":"string","title":"Prompt"},"model":{"type":"string","title":"Model","default":"stabilityai/sd3.5"},"size":{"type":"string","title":"Size","default":"1024x1024"},"n":{"type":"integer","title":"N","default":1},"quality":{"anyOf":[{"type":"string","enum":["standard","hd"]},{"type":"null"}],"title":"Quality","default":"standard"},"style":{"anyOf":[{"type":"string","enum":["natural","vivid"]},{"type":"null"}],"title":"Style","default":"natural"},"provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider","default":"deepinfra"},"google_project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Google Project Id"},"google_location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Google Location"},"google_endpoint_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Google Endpoint Id"}},"additionalProperties":true,"type":"object","required":["prompt"],"title":"ImageGenerationRequest","description":"Request model for image generation"},"ImageGenerationResponse":{"properties":{"created":{"type":"integer","title":"Created"},"data":{"items":{"$ref":"#/components/schemas/ImageData"},"type":"array","title":"Data"},"provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"gateway_usage":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Gateway Usage"}},"type":"object","required":["created","data"],"title":"ImageGenerationResponse","description":"Response model for image generation"},"IncidentMetadata":{"properties":{"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type","description":"Incident type (e.g., latency_spike, error_surge, downtime)"},"region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region","description":"Affected region"},"error_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Error Rate","description":"Error rate percentage during incident"}},"type":"object","title":"IncidentMetadata","description":"Metadata for an incident within a time bucket"},"IncidentSummary":{"properties":{"total_incidents":{"type":"integer","title":"Total Incidents","description":"Total number of incidents in the period"},"mttr_minutes":{"type":"number","title":"Mttr Minutes","description":"Mean time to recovery in minutes"},"worst_status":{"type":"string","enum":["operational","degraded","downtime"],"title":"Worst Status","description":"Worst status observed in the period"}},"type":"object","required":["total_incidents","mttr_minutes","worst_status"],"title":"IncidentSummary","description":"Summary of incidents over the entire period"},"JobCreate":{"properties":{"ipfs_job":{"type":"string","title":"Ipfs Job","description":"IPFS hash of the job definition"},"market":{"type":"string","title":"Market","description":"Market address"},"timeout":{"type":"integer","maximum":360000.0,"minimum":60.0,"title":"Timeout","description":"Job timeout in seconds","default":3600}},"type":"object","required":["ipfs_job","market"],"title":"JobCreate","description":"Request model for creating a job"},"JobExtend":{"properties":{"timeout":{"type":"integer","minimum":1.0,"title":"Timeout","description":"Additional time in seconds"}},"type":"object","required":["timeout"],"title":"JobExtend","description":"Request model for extending a job"},"LLMInferenceJobCreate":{"properties":{"name":{"type":"string","title":"Name","description":"Deployment name"},"market":{"type":"string","title":"Market","description":"GPU market address"},"model":{"type":"string","title":"Model","description":"HuggingFace model ID or path"},"framework":{"type":"string","title":"Framework","description":"Inference framework (vllm, ollama, lmdeploy)","default":"vllm"},"port":{"type":"integer","title":"Port","description":"API port to expose","default":8000},"max_model_len":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Model Len","description":"Maximum model context length"},"tensor_parallel_size":{"type":"integer","minimum":1.0,"title":"Tensor Parallel Size","description":"Number of GPUs for tensor parallelism","default":1},"timeout":{"type":"integer","maximum":360000.0,"minimum":60.0,"title":"Timeout","description":"Deployment timeout in seconds","default":3600},"replicas":{"type":"integer","minimum":1.0,"title":"Replicas","description":"Number of instances","default":1}},"type":"object","required":["name","market","model"],"title":"LLMInferenceJobCreate","description":"Request model for creating an LLM inference deployment"},"LatencyPercentilesResponse":{"properties":{"provider":{"type":"string","title":"Provider"},"model":{"type":"string","title":"Model"},"count":{"type":"integer","title":"Count"},"avg":{"type":"number","title":"Avg"},"p50":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"P50"},"p95":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"P95"},"p99":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"P99"}},"type":"object","required":["provider","model","count","avg"],"title":"LatencyPercentilesResponse","description":"Latency percentiles response"},"ListCouponsResponse":{"properties":{"coupons":{"items":{"$ref":"#/components/schemas/CouponResponse"},"type":"array","title":"Coupons"},"total":{"type":"integer","title":"Total"},"offset":{"type":"integer","title":"Offset"},"limit":{"type":"integer","title":"Limit"}},"type":"object","required":["coupons","total","offset","limit"],"title":"ListCouponsResponse","description":"List of coupons response"},"LiveTestReport":{"properties":{"timestamp":{"type":"string","title":"Timestamp"},"duration_s":{"type":"number","title":"Duration S","default":0.0},"total_models":{"type":"integer","title":"Total Models","default":0},"tested":{"type":"integer","title":"Tested","default":0},"passed":{"type":"integer","title":"Passed","default":0},"failed":{"type":"integer","title":"Failed","default":0},"timed_out":{"type":"integer","title":"Timed Out","default":0},"errored":{"type":"integer","title":"Errored","default":0},"skipped":{"type":"integer","title":"Skipped","default":0},"pass_rate":{"type":"number","title":"Pass Rate","default":0.0},"by_provider":{"items":{"$ref":"#/components/schemas/ProviderSummary"},"type":"array","title":"By Provider","default":[]},"failures":{"items":{"$ref":"#/components/schemas/ModelTestResult"},"type":"array","title":"Failures","default":[]},"results":{"items":{"$ref":"#/components/schemas/ModelTestResult"},"type":"array","title":"Results","default":[]},"persistence":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Persistence"}},"type":"object","required":["timestamp"],"title":"LiveTestReport"},"MemoryIn":{"properties":{"content":{"type":"string","maxLength":4000,"minLength":1,"title":"Content"},"kind":{"type":"string","maxLength":64,"title":"Kind","default":"fact"},"salience":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Salience","default":0.5}},"type":"object","required":["content"],"title":"MemoryIn"},"Message":{"properties":{"role":{"type":"string","title":"Role"},"content":{"anyOf":[{"type":"string"},{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Content"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"tool_calls":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Tool Calls"},"tool_call_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Call Id"}},"additionalProperties":true,"type":"object","required":["role"],"title":"Message","description":"Message format for OpenAI Chat Completions API.\nSupports text content, multimodal content, and tool/function message types."},"MessageFeedback":{"properties":{"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id"},"session_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Session Id"},"message_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Message Id"},"user_id":{"type":"integer","title":"User Id"},"feedback_type":{"type":"string","enum":["thumbs_up","thumbs_down","regenerate"],"title":"Feedback Type"},"rating":{"anyOf":[{"type":"integer","maximum":5.0,"minimum":1.0},{"type":"null"}],"title":"Rating"},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["user_id","feedback_type"],"title":"MessageFeedback"},"MessageFeedbackListResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"data":{"items":{"$ref":"#/components/schemas/MessageFeedback"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["success","data","count"],"title":"MessageFeedbackListResponse"},"MessageFeedbackResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"data":{"anyOf":[{"$ref":"#/components/schemas/MessageFeedback"},{"type":"null"}]},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["success"],"title":"MessageFeedbackResponse"},"ModelAvailability":{"properties":{"model_id":{"type":"string","title":"Model Id"},"provider":{"type":"string","title":"Provider"},"gateway":{"type":"string","title":"Gateway"},"status":{"$ref":"#/components/schemas/AvailabilityStatus"},"last_checked":{"type":"string","format":"date-time","title":"Last Checked"},"success_rate":{"type":"number","title":"Success Rate"},"response_time_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Response Time Ms"},"error_count":{"type":"integer","title":"Error Count"},"circuit_breaker_state":{"$ref":"#/components/schemas/CircuitBreakerState"},"fallback_models":{"items":{"type":"string"},"type":"array","title":"Fallback Models"},"maintenance_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Maintenance Until"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"}},"type":"object","required":["model_id","provider","gateway","status","last_checked","success_rate","response_time_ms","error_count","circuit_breaker_state","fallback_models"],"title":"ModelAvailability"},"ModelBulkCreate":{"properties":{"models":{"items":{"$ref":"#/components/schemas/ModelCreate"},"type":"array","title":"Models","description":"List of models to create"}},"type":"object","required":["models"],"title":"ModelBulkCreate","description":"Schema for bulk creating models"},"ModelCreate":{"properties":{"provider_id":{"type":"integer","title":"Provider Id","description":"Provider ID (foreign key)"},"model_name":{"type":"string","title":"Model Name","description":"Model display name"},"provider_model_id":{"type":"string","title":"Provider Model Id","description":"Provider-specific model identifier"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Model description"},"context_length":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Context Length","description":"Maximum context length"},"modality":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Modality","description":"Model modality (e.g., 'text->text', 'text->image')","default":"text->text"},"pricing_prompt":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Pricing Prompt","description":"Prompt pricing per token"},"pricing_completion":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Pricing Completion","description":"Completion pricing per token"},"pricing_image":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Pricing Image","description":"Image pricing"},"pricing_request":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Pricing Request","description":"Request pricing"},"supports_streaming":{"type":"boolean","title":"Supports Streaming","description":"Supports streaming responses","default":false},"supports_function_calling":{"type":"boolean","title":"Supports Function Calling","description":"Supports function calling","default":false},"supports_vision":{"type":"boolean","title":"Supports Vision","description":"Supports vision/image inputs","default":false},"is_active":{"type":"boolean","title":"Is Active","description":"Whether model is active","default":true},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Additional metadata"}},"type":"object","required":["provider_id","model_name","provider_model_id"],"title":"ModelCreate","description":"Schema for creating a model"},"ModelHealthHistoryResponse":{"properties":{"id":{"type":"integer","title":"Id","description":"History record ID"},"model_id":{"type":"integer","title":"Model Id","description":"Model ID"},"health_status":{"type":"string","title":"Health Status","description":"Health status"},"response_time_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Response Time Ms","description":"Response time in milliseconds"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message","description":"Error message"},"checked_at":{"type":"string","format":"date-time","title":"Checked At","description":"Check timestamp"}},"type":"object","required":["id","model_id","health_status","checked_at"],"title":"ModelHealthHistoryResponse","description":"Schema for model health history response"},"ModelHealthResponse":{"properties":{"model_id":{"type":"string","title":"Model Id","description":"Unique model identifier"},"provider":{"type":"string","title":"Provider","description":"Provider name"},"gateway":{"type":"string","title":"Gateway","description":"Gateway name"},"status":{"$ref":"#/components/schemas/HealthStatus","description":"Current health status"},"response_time_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Response Time Ms","description":"Last response time in milliseconds"},"success_rate":{"type":"number","title":"Success Rate","description":"Success rate percentage (0-100)","default":0.0},"last_checked":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Checked","description":"Last health check timestamp"},"last_success":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Success","description":"Last successful request timestamp"},"last_failure":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Failure","description":"Last failed request timestamp"},"error_count":{"type":"integer","title":"Error Count","description":"Total error count","default":0},"total_requests":{"type":"integer","title":"Total Requests","description":"Total request count","default":0},"avg_response_time_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Response Time Ms","description":"Average response time in milliseconds"},"uptime_percentage":{"type":"number","title":"Uptime Percentage","description":"Uptime percentage (0-100)","default":0.0},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message","description":"Last error message"}},"type":"object","required":["model_id","provider","gateway","status"],"title":"ModelHealthResponse","description":"Health metrics for a specific model"},"ModelHealthUpdate":{"properties":{"health_status":{"type":"string","title":"Health Status","description":"Health status: 'healthy', 'degraded', 'down', 'unknown'"},"response_time_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Response Time Ms","description":"Response time in milliseconds"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message","description":"Error message if health check failed"}},"type":"object","required":["health_status"],"title":"ModelHealthUpdate","description":"Schema for updating model health"},"ModelResponse":{"properties":{"provider_id":{"type":"integer","title":"Provider Id","description":"Provider ID (foreign key)"},"model_name":{"type":"string","title":"Model Name","description":"Model display name"},"provider_model_id":{"type":"string","title":"Provider Model Id","description":"Provider-specific model identifier"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Model description"},"context_length":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Context Length","description":"Maximum context length"},"modality":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Modality","description":"Model modality (e.g., 'text->text', 'text->image')","default":"text->text"},"pricing_prompt":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Pricing Prompt","description":"Prompt pricing per token"},"pricing_completion":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Pricing Completion","description":"Completion pricing per token"},"pricing_image":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Pricing Image","description":"Image pricing"},"pricing_request":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Pricing Request","description":"Request pricing"},"supports_streaming":{"type":"boolean","title":"Supports Streaming","description":"Supports streaming responses","default":false},"supports_function_calling":{"type":"boolean","title":"Supports Function Calling","description":"Supports function calling","default":false},"supports_vision":{"type":"boolean","title":"Supports Vision","description":"Supports vision/image inputs","default":false},"is_active":{"type":"boolean","title":"Is Active","description":"Whether model is active","default":true},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Additional metadata"},"id":{"type":"integer","title":"Id","description":"Model ID"},"average_response_time_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Average Response Time Ms","description":"Average response time in milliseconds"},"health_status":{"type":"string","title":"Health Status","description":"Health status"},"last_health_check_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Health Check At","description":"Last health check timestamp"},"success_rate":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Success Rate","description":"Success rate percentage"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Creation timestamp"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"Last update timestamp"}},"type":"object","required":["provider_id","model_name","provider_model_id","id","health_status","created_at","updated_at"],"title":"ModelResponse","description":"Schema for model response"},"ModelStats":{"properties":{"total":{"type":"integer","title":"Total","description":"Total number of models"},"active":{"type":"integer","title":"Active","description":"Number of active models"},"inactive":{"type":"integer","title":"Inactive","description":"Number of inactive models"},"healthy":{"type":"integer","title":"Healthy","description":"Number of healthy models"},"degraded":{"type":"integer","title":"Degraded","description":"Number of degraded models"},"down":{"type":"integer","title":"Down","description":"Number of down models"},"unknown":{"type":"integer","title":"Unknown","description":"Number of models with unknown status"},"by_modality":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Modality","description":"Model count by modality"}},"type":"object","required":["total","active","inactive","healthy","degraded","down","unknown"],"title":"ModelStats","description":"Schema for model statistics"},"ModelStatusResponse":{"properties":{"model_id":{"type":"string","title":"Model Id","description":"Model ID"},"name":{"type":"string","title":"Name","description":"Model name"},"provider":{"type":"string","title":"Provider","description":"Provider name"},"status":{"type":"string","title":"Status","description":"Status indicator"},"status_color":{"type":"string","title":"Status Color","description":"Status color for UI"},"response_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Response Time","description":"Response time display"},"uptime":{"type":"string","title":"Uptime","description":"Uptime percentage display"},"last_checked":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Checked","description":"Last checked display"}},"type":"object","required":["model_id","name","provider","status","status_color","uptime"],"title":"ModelStatusResponse","description":"Model status for frontend display"},"ModelTestResult":{"properties":{"model_id":{"type":"string","title":"Model Id"},"gateway":{"type":"string","title":"Gateway"},"provider":{"type":"string","title":"Provider"},"status":{"type":"string","title":"Status","description":"pass, fail, skip, timeout, error"},"status_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Status Code"},"latency_ms":{"type":"number","title":"Latency Ms","default":0.0},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"response_preview":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Response Preview"}},"type":"object","required":["model_id","gateway","provider","status"],"title":"ModelTestResult"},"ModelUpdate":{"properties":{"provider_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Provider Id"},"model_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Name"},"provider_model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Model Id"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"context_length":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Context Length"},"modality":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Modality"},"pricing_prompt":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Pricing Prompt"},"pricing_completion":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Pricing Completion"},"pricing_image":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Pricing Image"},"pricing_request":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Pricing Request"},"supports_streaming":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Supports Streaming"},"supports_function_calling":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Supports Function Calling"},"supports_vision":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Supports Vision"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"}},"type":"object","title":"ModelUpdate","description":"Schema for updating a model (all fields optional)"},"ModelUptimeData":{"properties":{"model":{"type":"string","title":"Model","description":"Model identifier (e.g., gpt-4, claude-3-opus)"},"provider":{"type":"string","title":"Provider","description":"Provider name"},"gateway":{"type":"string","title":"Gateway","description":"Gateway identifier"},"uptime_percentage":{"type":"number","title":"Uptime Percentage","description":"Uptime percentage over the period"},"period_label":{"type":"string","title":"Period Label","description":"Human-readable period label"},"last_checked":{"type":"string","format":"date-time","title":"Last Checked","description":"Timestamp of last health check"},"samples":{"items":{"$ref":"#/components/schemas/UptimeSample"},"type":"array","title":"Samples","description":"Array of uptime samples per time bucket"},"incident_summary":{"$ref":"#/components/schemas/IncidentSummary","description":"Summary of incidents over the period"}},"type":"object","required":["model","provider","gateway","uptime_percentage","period_label","last_checked","samples","incident_summary"],"title":"ModelUptimeData","description":"Uptime data for a single model"},"ModelUptimeResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"models":{"items":{"$ref":"#/components/schemas/ModelUptimeData"},"type":"array","title":"Models"}},"type":"object","required":["models"],"title":"ModelUptimeResponse","description":"Response for GET /health/models/uptime"},"ModelWithProvider":{"properties":{"provider_id":{"type":"integer","title":"Provider Id","description":"Provider ID (foreign key)"},"model_name":{"type":"string","title":"Model Name","description":"Model display name"},"provider_model_id":{"type":"string","title":"Provider Model Id","description":"Provider-specific model identifier"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Model description"},"context_length":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Context Length","description":"Maximum context length"},"modality":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Modality","description":"Model modality (e.g., 'text->text', 'text->image')","default":"text->text"},"pricing_prompt":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Pricing Prompt","description":"Prompt pricing per token"},"pricing_completion":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Pricing Completion","description":"Completion pricing per token"},"pricing_image":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Pricing Image","description":"Image pricing"},"pricing_request":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Pricing Request","description":"Request pricing"},"supports_streaming":{"type":"boolean","title":"Supports Streaming","description":"Supports streaming responses","default":false},"supports_function_calling":{"type":"boolean","title":"Supports Function Calling","description":"Supports function calling","default":false},"supports_vision":{"type":"boolean","title":"Supports Vision","description":"Supports vision/image inputs","default":false},"is_active":{"type":"boolean","title":"Is Active","description":"Whether model is active","default":true},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Additional metadata"},"id":{"type":"integer","title":"Id","description":"Model ID"},"average_response_time_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Average Response Time Ms","description":"Average response time in milliseconds"},"health_status":{"type":"string","title":"Health Status","description":"Health status"},"last_health_check_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Health Check At","description":"Last health check timestamp"},"success_rate":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Success Rate","description":"Success rate percentage"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Creation timestamp"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"Last update timestamp"},"provider":{"additionalProperties":true,"type":"object","title":"Provider","description":"Provider information"}},"type":"object","required":["provider_id","model_name","provider_model_id","id","health_status","created_at","updated_at","provider"],"title":"ModelWithProvider","description":"Schema for model with provider information"},"NotificationPreferences":{"properties":{"user_id":{"type":"integer","title":"User Id"},"email_notifications":{"type":"boolean","title":"Email Notifications","default":true},"low_balance_threshold":{"type":"number","title":"Low Balance Threshold","default":10.0},"trial_expiry_reminder_days":{"type":"integer","title":"Trial Expiry Reminder Days","default":1},"plan_expiry_reminder_days":{"type":"integer","title":"Plan Expiry Reminder Days","default":7},"usage_alerts":{"type":"boolean","title":"Usage Alerts","default":true},"webhook_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Url"},"webhook_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Secret"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["user_id"],"title":"NotificationPreferences","description":"User notification preferences"},"NotificationStats":{"properties":{"total_notifications":{"type":"integer","title":"Total Notifications"},"sent_notifications":{"type":"integer","title":"Sent Notifications"},"failed_notifications":{"type":"integer","title":"Failed Notifications"},"pending_notifications":{"type":"integer","title":"Pending Notifications"},"delivery_rate":{"type":"number","title":"Delivery Rate"},"last_24h_notifications":{"type":"integer","title":"Last 24H Notifications"}},"type":"object","required":["total_notifications","sent_notifications","failed_notifications","pending_notifications","delivery_rate","last_24h_notifications"],"title":"NotificationStats","description":"Notification statistics"},"NotificationType":{"type":"string","enum":["low_balance","trial_expiring","trial_expired","plan_expiring","plan_expired","subscription_expiring","credit_added","credits_depleted","usage_alert","welcome","password_reset","usage_report","api_key_created","plan_upgrade"],"title":"NotificationType","description":"Notification type enumeration"},"PartnerAnalyticsResponse":{"properties":{"partner_code":{"type":"string","title":"Partner Code"},"total_trials":{"type":"integer","title":"Total Trials"},"active_trials":{"type":"integer","title":"Active Trials"},"converted_trials":{"type":"integer","title":"Converted Trials"},"expired_trials":{"type":"integer","title":"Expired Trials"},"conversion_rate_percent":{"type":"number","title":"Conversion Rate Percent"},"total_revenue_usd":{"type":"number","title":"Total Revenue Usd"},"avg_revenue_per_conversion":{"type":"number","title":"Avg Revenue Per Conversion"}},"type":"object","required":["partner_code","total_trials","active_trials","converted_trials","expired_trials","conversion_rate_percent","total_revenue_usd","avg_revenue_per_conversion"],"title":"PartnerAnalyticsResponse"},"PartnerConfigResponse":{"properties":{"partner_code":{"type":"string","title":"Partner Code"},"partner_name":{"type":"string","title":"Partner Name"},"trial_duration_days":{"type":"integer","title":"Trial Duration Days"},"trial_tier":{"type":"string","title":"Trial Tier"},"trial_credits_usd":{"type":"number","title":"Trial Credits Usd"},"daily_usage_limit_usd":{"type":"number","title":"Daily Usage Limit Usd"}},"type":"object","required":["partner_code","partner_name","trial_duration_days","trial_tier","trial_credits_usd","daily_usage_limit_usd"],"title":"PartnerConfigResponse"},"PartnerTrialResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"partner_code":{"type":"string","title":"Partner Code"},"partner_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Partner Name"},"trial_tier":{"type":"string","title":"Trial Tier"},"trial_credits_usd":{"type":"number","title":"Trial Credits Usd"},"trial_duration_days":{"type":"integer","title":"Trial Duration Days"},"trial_expires_at":{"type":"string","title":"Trial Expires At"},"daily_usage_limit_usd":{"type":"number","title":"Daily Usage Limit Usd"}},"type":"object","required":["success","partner_code","trial_tier","trial_credits_usd","trial_duration_days","trial_expires_at","daily_usage_limit_usd"],"title":"PartnerTrialResponse"},"PartnerTrialStatusResponse":{"properties":{"has_partner_trial":{"type":"boolean","title":"Has Partner Trial"},"partner_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Partner Code"},"trial_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trial Status"},"is_expired":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Expired"},"days_remaining":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Days Remaining"},"trial_started_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trial Started At"},"trial_expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trial Expires At"},"credits_used":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Credits Used"},"tokens_used":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tokens Used"},"requests_made":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Requests Made"},"converted":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Converted"}},"type":"object","required":["has_partner_trial"],"title":"PartnerTrialStatusResponse"},"PlanEntitlementsResponse":{"properties":{"has_plan":{"type":"boolean","title":"Has Plan"},"plan_name":{"type":"string","title":"Plan Name"},"daily_request_limit":{"type":"integer","title":"Daily Request Limit"},"monthly_request_limit":{"type":"integer","title":"Monthly Request Limit"},"daily_token_limit":{"type":"integer","title":"Daily Token Limit"},"monthly_token_limit":{"type":"integer","title":"Monthly Token Limit"},"features":{"items":{"type":"string"},"type":"array","title":"Features"},"can_access_feature":{"type":"boolean","title":"Can Access Feature"},"plan_expires":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Expires"},"plan_expired":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Plan Expired"}},"type":"object","required":["has_plan","plan_name","daily_request_limit","monthly_request_limit","daily_token_limit","monthly_token_limit","features","can_access_feature"],"title":"PlanEntitlementsResponse"},"PlanResponse":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"plan_type":{"type":"string","title":"Plan Type","default":"free"},"daily_request_limit":{"type":"integer","title":"Daily Request Limit"},"monthly_request_limit":{"type":"integer","title":"Monthly Request Limit"},"daily_token_limit":{"type":"integer","title":"Daily Token Limit"},"monthly_token_limit":{"type":"integer","title":"Monthly Token Limit"},"price_per_month":{"type":"number","title":"Price Per Month"},"yearly_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Yearly Price"},"price_per_token":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price Per Token"},"is_pay_as_you_go":{"type":"boolean","title":"Is Pay As You Go","default":false},"max_concurrent_requests":{"type":"integer","title":"Max Concurrent Requests","default":5},"features":{"items":{"type":"string"},"type":"array","title":"Features"},"is_active":{"type":"boolean","title":"Is Active"}},"type":"object","required":["id","name","description","daily_request_limit","monthly_request_limit","daily_token_limit","monthly_token_limit","price_per_month","features","is_active"],"title":"PlanResponse"},"PlanUsageResponse":{"properties":{"plan_name":{"type":"string","title":"Plan Name"},"usage":{"additionalProperties":{"type":"integer"},"type":"object","title":"Usage"},"limits":{"additionalProperties":{"type":"integer"},"type":"object","title":"Limits"},"remaining":{"additionalProperties":{"type":"integer"},"type":"object","title":"Remaining"},"at_limit":{"additionalProperties":{"type":"boolean"},"type":"object","title":"At Limit"}},"type":"object","required":["plan_name","usage","limits","remaining","at_limit"],"title":"PlanUsageResponse"},"PrivyAuthRequest":{"properties":{"user":{"$ref":"#/components/schemas/PrivyUserData"},"token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"privy_access_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Privy Access Token"},"refresh_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Refresh Token"},"session_update_action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Update Action"},"is_new_user":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is New User"},"referral_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Referral Code"},"environment_tag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Environment Tag","default":"live"},"auto_create_api_key":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Auto Create Api Key","default":true}},"type":"object","required":["user"],"title":"PrivyAuthRequest"},"PrivyAuthResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"},"user_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"User Id"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"},"auth_method":{"anyOf":[{"$ref":"#/components/schemas/AuthMethod"},{"type":"null"}]},"privy_user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Privy User Id"},"is_new_user":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is New User"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"phone_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone Number"},"credits":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Credits"},"timestamp":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Timestamp"},"subscription_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subscription Status"},"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier"},"tier_display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier Display Name"},"trial_expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trial Expires At"},"subscription_end_date":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Subscription End Date"},"subscription_allowance":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Subscription Allowance"},"purchased_credits":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Purchased Credits"},"total_credits":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Credits"},"allowance_reset_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Allowance Reset Date"}},"type":"object","required":["success","message"],"title":"PrivyAuthResponse"},"PrivyLinkedAccount":{"properties":{"type":{"type":"string","title":"Type"},"subject":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subject"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"phone_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone Number"},"verified_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Verified At"},"first_verified_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"First Verified At"},"latest_verified_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Latest Verified At"}},"type":"object","required":["type"],"title":"PrivyLinkedAccount"},"PrivyUserData":{"properties":{"id":{"type":"string","title":"Id"},"created_at":{"type":"integer","title":"Created At"},"linked_accounts":{"items":{"$ref":"#/components/schemas/PrivyLinkedAccount"},"type":"array","title":"Linked Accounts","default":[]},"mfa_methods":{"items":{"type":"string"},"type":"array","title":"Mfa Methods","default":[]},"has_accepted_terms":{"type":"boolean","title":"Has Accepted Terms","default":false},"is_guest":{"type":"boolean","title":"Is Guest","default":false}},"type":"object","required":["id","created_at"],"title":"PrivyUserData"},"ProviderCreate":{"properties":{"name":{"type":"string","title":"Name","description":"Provider name"},"slug":{"type":"string","title":"Slug","description":"Provider slug (unique identifier)"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Provider description"},"base_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Base Url","description":"Base API URL"},"api_key_env_var":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key Env Var","description":"Environment variable name for API key"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url","description":"Provider logo URL"},"site_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Url","description":"Provider website URL"},"privacy_policy_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Privacy Policy Url","description":"Privacy policy URL"},"terms_of_service_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Terms Of Service Url","description":"Terms of service URL"},"status_page_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Page Url","description":"Status page URL"},"is_active":{"type":"boolean","title":"Is Active","description":"Whether provider is active","default":true},"supports_streaming":{"type":"boolean","title":"Supports Streaming","description":"Supports streaming responses","default":false},"supports_function_calling":{"type":"boolean","title":"Supports Function Calling","description":"Supports function calling","default":false},"supports_vision":{"type":"boolean","title":"Supports Vision","description":"Supports vision/image inputs","default":false},"supports_image_generation":{"type":"boolean","title":"Supports Image Generation","description":"Supports image generation","default":false},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Additional metadata"}},"type":"object","required":["name","slug"],"title":"ProviderCreate","description":"Schema for creating a provider"},"ProviderCreditBalance":{"properties":{"provider":{"type":"string","title":"Provider","description":"Provider name"},"balance":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Balance","description":"Current balance in USD"},"status":{"type":"string","title":"Status","description":"Status: healthy, warning, critical, unknown"},"checked_at":{"type":"string","title":"Checked At","description":"When the balance was checked (ISO 8601)"},"cached":{"type":"boolean","title":"Cached","description":"Whether this is cached data","default":false},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error","description":"Error message if check failed"},"monitoring_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Monitoring Method","description":"How this provider is monitored (e.g., 'balance_api', '402_frequency')"},"recent_402_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Recent 402 Count","description":"Number of 402s in the monitoring window"},"window_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Window Minutes","description":"Monitoring window size in minutes"}},"type":"object","required":["provider","status","checked_at"],"title":"ProviderCreditBalance","description":"Provider credit balance information"},"ProviderCreditsResponse":{"properties":{"providers":{"additionalProperties":{"$ref":"#/components/schemas/ProviderCreditBalance"},"type":"object","title":"Providers","description":"Map of provider name to credit balance"},"timestamp":{"type":"string","title":"Timestamp","description":"Response timestamp (ISO 8601)"}},"type":"object","required":["providers","timestamp"],"title":"ProviderCreditsResponse","description":"Response containing all provider credit balances"},"ProviderHealthResponse":{"properties":{"provider":{"type":"string","title":"Provider","description":"Provider name"},"gateway":{"type":"string","title":"Gateway","description":"Gateway name"},"status":{"$ref":"#/components/schemas/ProviderStatus","description":"Current provider status"},"total_models":{"type":"integer","title":"Total Models","description":"Total number of models","default":0},"healthy_models":{"type":"integer","title":"Healthy Models","description":"Number of healthy models","default":0},"degraded_models":{"type":"integer","title":"Degraded Models","description":"Number of degraded models","default":0},"unhealthy_models":{"type":"integer","title":"Unhealthy Models","description":"Number of unhealthy models","default":0},"avg_response_time_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Response Time Ms","description":"Average response time in milliseconds"},"overall_uptime":{"type":"number","title":"Overall Uptime","description":"Overall uptime percentage (0-100)","default":0.0},"last_checked":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Checked","description":"Last health check timestamp"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message","description":"Last error message"}},"type":"object","required":["provider","gateway","status"],"title":"ProviderHealthResponse","description":"Health metrics for a provider"},"ProviderHealthUpdate":{"properties":{"health_status":{"type":"string","title":"Health Status","description":"Health status: 'healthy', 'degraded', 'down', 'unknown'"},"average_response_time_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Average Response Time Ms","description":"Average response time in milliseconds"}},"type":"object","required":["health_status"],"title":"ProviderHealthUpdate","description":"Schema for updating provider health"},"ProviderListResponse":{"properties":{"providers":{"items":{"type":"string"},"type":"array","title":"Providers","description":"List of provider slugs"},"count":{"type":"integer","title":"Count","description":"Number of providers"}},"type":"object","required":["providers","count"],"title":"ProviderListResponse","description":"Response with list of available providers"},"ProviderResponse":{"properties":{"name":{"type":"string","title":"Name","description":"Provider name"},"slug":{"type":"string","title":"Slug","description":"Provider slug (unique identifier)"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Provider description"},"base_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Base Url","description":"Base API URL"},"api_key_env_var":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key Env Var","description":"Environment variable name for API key"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url","description":"Provider logo URL"},"site_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Url","description":"Provider website URL"},"privacy_policy_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Privacy Policy Url","description":"Privacy policy URL"},"terms_of_service_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Terms Of Service Url","description":"Terms of service URL"},"status_page_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Page Url","description":"Status page URL"},"is_active":{"type":"boolean","title":"Is Active","description":"Whether provider is active","default":true},"supports_streaming":{"type":"boolean","title":"Supports Streaming","description":"Supports streaming responses","default":false},"supports_function_calling":{"type":"boolean","title":"Supports Function Calling","description":"Supports function calling","default":false},"supports_vision":{"type":"boolean","title":"Supports Vision","description":"Supports vision/image inputs","default":false},"supports_image_generation":{"type":"boolean","title":"Supports Image Generation","description":"Supports image generation","default":false},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Additional metadata"},"id":{"type":"integer","title":"Id","description":"Provider ID"},"average_response_time_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Average Response Time Ms","description":"Average response time in milliseconds"},"health_status":{"type":"string","title":"Health Status","description":"Health status"},"last_health_check_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Health Check At","description":"Last health check timestamp"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Creation timestamp"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"Last update timestamp"}},"type":"object","required":["name","slug","id","health_status","created_at","updated_at"],"title":"ProviderResponse","description":"Schema for provider response"},"ProviderStats":{"properties":{"total":{"type":"integer","title":"Total","description":"Total number of providers"},"active":{"type":"integer","title":"Active","description":"Number of active providers"},"inactive":{"type":"integer","title":"Inactive","description":"Number of inactive providers"},"healthy":{"type":"integer","title":"Healthy","description":"Number of healthy providers"},"degraded":{"type":"integer","title":"Degraded","description":"Number of degraded providers"},"down":{"type":"integer","title":"Down","description":"Number of down providers"},"unknown":{"type":"integer","title":"Unknown","description":"Number of providers with unknown status"}},"type":"object","required":["total","active","inactive","healthy","degraded","down","unknown"],"title":"ProviderStats","description":"Schema for provider statistics"},"ProviderStatus":{"type":"string","enum":["online","offline","degraded","maintenance","unknown"],"title":"ProviderStatus","description":"Provider status enumeration"},"ProviderStatusResponse":{"properties":{"provider":{"type":"string","title":"Provider","description":"Provider name"},"gateway":{"type":"string","title":"Gateway","description":"Gateway name"},"status":{"type":"string","title":"Status","description":"Status indicator"},"status_color":{"type":"string","title":"Status Color","description":"Status color for UI"},"models_count":{"type":"integer","title":"Models Count","description":"Number of models","default":0},"healthy_count":{"type":"integer","title":"Healthy Count","description":"Number of healthy models","default":0},"uptime":{"type":"string","title":"Uptime","description":"Uptime percentage display"},"avg_response_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avg Response Time","description":"Average response time display"}},"type":"object","required":["provider","gateway","status","status_color","uptime"],"title":"ProviderStatusResponse","description":"Provider status for frontend display"},"ProviderSummary":{"properties":{"provider":{"type":"string","title":"Provider"},"total":{"type":"integer","title":"Total","default":0},"passed":{"type":"integer","title":"Passed","default":0},"failed":{"type":"integer","title":"Failed","default":0},"timed_out":{"type":"integer","title":"Timed Out","default":0},"errored":{"type":"integer","title":"Errored","default":0},"skipped":{"type":"integer","title":"Skipped","default":0},"avg_latency_ms":{"type":"number","title":"Avg Latency Ms","default":0.0}},"type":"object","required":["provider"],"title":"ProviderSummary"},"ProviderUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"base_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Base Url"},"api_key_env_var":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key Env Var"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"site_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Url"},"privacy_policy_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Privacy Policy Url"},"terms_of_service_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Terms Of Service Url"},"status_page_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Page Url"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"supports_streaming":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Supports Streaming"},"supports_function_calling":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Supports Function Calling"},"supports_vision":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Supports Vision"},"supports_image_generation":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Supports Image Generation"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"}},"type":"object","title":"ProviderUpdate","description":"Schema for updating a provider (all fields optional)"},"ProviderUptimeData":{"properties":{"provider":{"type":"string","title":"Provider","description":"Provider name (e.g., OpenAI, Anthropic)"},"gateway":{"type":"string","title":"Gateway","description":"Gateway identifier"},"uptime_percentage":{"type":"number","title":"Uptime Percentage","description":"Uptime percentage over the period"},"period_label":{"type":"string","title":"Period Label","description":"Human-readable period label (e.g., 'Last 72 hours')"},"last_checked":{"type":"string","format":"date-time","title":"Last Checked","description":"Timestamp of last health check"},"samples":{"items":{"$ref":"#/components/schemas/UptimeSample"},"type":"array","title":"Samples","description":"Array of uptime samples per time bucket"},"incident_summary":{"$ref":"#/components/schemas/IncidentSummary","description":"Summary of incidents over the period"}},"type":"object","required":["provider","gateway","uptime_percentage","period_label","last_checked","samples","incident_summary"],"title":"ProviderUptimeData","description":"Uptime data for a single provider"},"ProviderUptimeResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"providers":{"items":{"$ref":"#/components/schemas/ProviderUptimeData"},"type":"array","title":"Providers"}},"type":"object","required":["providers"],"title":"ProviderUptimeResponse","description":"Response for GET /health/providers/uptime"},"ProxyRequest":{"properties":{"model":{"type":"string","title":"Model","description":"ID of the model to use"},"messages":{"items":{"$ref":"#/components/schemas/Message"},"type":"array","title":"Messages","description":"A list of messages comprising the conversation so far"},"max_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Tokens","description":"The maximum number of tokens that can be generated in the chat completion","default":4096},"temperature":{"anyOf":[{"type":"number","maximum":2.0,"minimum":0.0},{"type":"null"}],"title":"Temperature","description":"Sampling temperature between 0 and 2. Higher values make output more random","default":1.0},"top_p":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Top P","description":"Nucleus sampling: consider tokens with top_p probability mass","default":1.0},"n":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"N","description":"How many chat completion choices to generate for each input message","default":1},"stop":{"anyOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Stop","description":"Up to 4 sequences where the API will stop generating further tokens"},"frequency_penalty":{"anyOf":[{"type":"number","maximum":2.0,"minimum":-2.0},{"type":"null"}],"title":"Frequency Penalty","description":"Penalize new tokens based on their existing frequency in the text","default":0.0},"presence_penalty":{"anyOf":[{"type":"number","maximum":2.0,"minimum":-2.0},{"type":"null"}],"title":"Presence Penalty","description":"Penalize new tokens based on whether they appear in the text so far","default":0.0},"stream":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Stream","description":"If set, partial message deltas will be sent","default":false},"stream_options":{"anyOf":[{"$ref":"#/components/schemas/StreamOptions"},{"type":"null"}],"description":"Options for streaming response. Only set when stream is true"},"tools":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Tools","description":"A list of tools the model may call"},"tool_choice":{"anyOf":[{"type":"string"},{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Tool Choice","description":"Controls which tool is called. 'none', 'auto', 'required', or specific tool"},"parallel_tool_calls":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Parallel Tool Calls","description":"Whether to enable parallel function calling during tool use","default":true},"response_format":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Response Format","description":"Format for model output: 'text', 'json_object', or 'json_schema'"},"logprobs":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Logprobs","description":"Whether to return log probabilities of the output tokens"},"top_logprobs":{"anyOf":[{"type":"integer","maximum":20.0,"minimum":0.0},{"type":"null"}],"title":"Top Logprobs","description":"Number of most likely tokens to return at each position (0-20)"},"logit_bias":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Logit Bias","description":"Modify likelihood of specified tokens appearing in the completion"},"seed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Seed","description":"Seed for deterministic sampling. Results may still vary"},"user":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User","description":"Unique identifier for your end-user for abuse monitoring"},"service_tier":{"anyOf":[{"type":"string","enum":["auto","default"]},{"type":"null"}],"title":"Service Tier","description":"Latency tier for processing the request"},"provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider","description":"Provider selection: 'openrouter', 'featherless', etc"},"auto_web_search":{"anyOf":[{"type":"boolean"},{"type":"string","const":"auto"},{"type":"null"}],"title":"Auto Web Search","description":"Enable automatic web search for queries that would benefit from real-time information. Set to True to always search, False to disable, or 'auto' (default) to let the system decide based on query analysis. When enabled, search results are prepended to the context.","default":"auto"},"web_search_threshold":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Web Search Threshold","description":"Confidence threshold for auto web search (0.0-1.0). Lower values trigger search more often. Only used when auto_web_search is 'auto'. Default is 0.5.","default":0.5}},"additionalProperties":true,"type":"object","required":["model","messages"],"title":"ProxyRequest","description":"OpenAI-compatible Chat Completions API request schema.\nEndpoint: POST /v1/chat/completions\n\nThis schema aligns with OpenAI's Chat Completions API specification.\nSee: https://platform.openai.com/docs/api-reference/chat/create"},"QueryRequest":{"properties":{"targets":{"items":{"$ref":"#/components/schemas/QueryTarget"},"type":"array","title":"Targets"},"range":{"additionalProperties":{"type":"string"},"type":"object","title":"Range"},"interval":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Interval"},"maxDataPoints":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Maxdatapoints"}},"type":"object","required":["targets"],"title":"QueryRequest","description":"Query request from Grafana"},"QueryTarget":{"properties":{"target":{"type":"string","title":"Target"},"refId":{"type":"string","title":"Refid"},"type":{"type":"string","title":"Type","default":"timeserie"}},"type":"object","required":["target","refId"],"title":"QueryTarget","description":"Query target from Grafana"},"RateLimitConfig":{"properties":{"requests_per_minute":{"type":"integer","title":"Requests Per Minute","default":60},"requests_per_hour":{"type":"integer","title":"Requests Per Hour","default":1000},"requests_per_day":{"type":"integer","title":"Requests Per Day","default":10000},"tokens_per_minute":{"type":"integer","title":"Tokens Per Minute","default":10000},"tokens_per_hour":{"type":"integer","title":"Tokens Per Hour","default":100000},"tokens_per_day":{"type":"integer","title":"Tokens Per Day","default":1000000}},"type":"object","title":"RateLimitConfig"},"RateLimitConfigRequest":{"properties":{"requests_per_minute":{"type":"integer","minimum":0.0,"title":"Requests Per Minute","description":"Requests allowed per minute","default":60},"requests_per_hour":{"type":"integer","minimum":0.0,"title":"Requests Per Hour","description":"Requests allowed per hour","default":1000},"requests_per_day":{"type":"integer","minimum":0.0,"title":"Requests Per Day","description":"Requests allowed per day","default":10000},"tokens_per_minute":{"type":"integer","minimum":0.0,"title":"Tokens Per Minute","description":"Tokens allowed per minute","default":10000},"tokens_per_hour":{"type":"integer","minimum":0.0,"title":"Tokens Per Hour","description":"Tokens allowed per hour","default":100000},"tokens_per_day":{"type":"integer","minimum":0.0,"title":"Tokens Per Day","description":"Tokens allowed per day","default":1000000},"burst_limit":{"type":"integer","minimum":0.0,"title":"Burst Limit","description":"Burst limit for sudden spikes","default":100},"concurrency_limit":{"type":"integer","minimum":0.0,"title":"Concurrency Limit","description":"Max concurrent requests","default":50}},"type":"object","title":"RateLimitConfigRequest","description":"Request to set rate limit configuration"},"RealtimeStatsResponse":{"properties":{"timestamp":{"type":"string","title":"Timestamp"},"providers":{"additionalProperties":{"additionalProperties":true,"type":"object"},"type":"object","title":"Providers"},"total_requests":{"type":"integer","title":"Total Requests"},"total_cost":{"type":"number","title":"Total Cost"},"avg_health_score":{"type":"number","title":"Avg Health Score"}},"type":"object","required":["timestamp","providers","total_requests","total_cost","avg_health_score"],"title":"RealtimeStatsResponse","description":"Real-time statistics response"},"RedeemCouponRequest":{"properties":{"code":{"type":"string","maxLength":50,"minLength":3,"title":"Code","description":"Coupon code to redeem"}},"type":"object","required":["code"],"title":"RedeemCouponRequest","description":"Request to redeem a coupon"},"RedemptionHistoryItem":{"properties":{"id":{"type":"integer","title":"Id"},"coupon_code":{"type":"string","title":"Coupon Code"},"coupon_scope":{"type":"string","title":"Coupon Scope"},"coupon_type":{"type":"string","title":"Coupon Type"},"value_applied":{"type":"number","title":"Value Applied"},"redeemed_at":{"type":"string","format":"date-time","title":"Redeemed At"},"user_balance_before":{"type":"number","title":"User Balance Before"},"user_balance_after":{"type":"number","title":"User Balance After"}},"type":"object","required":["id","coupon_code","coupon_scope","coupon_type","value_applied","redeemed_at","user_balance_before","user_balance_after"],"title":"RedemptionHistoryItem","description":"Single redemption history item"},"RedemptionHistoryResponse":{"properties":{"redemptions":{"items":{"$ref":"#/components/schemas/RedemptionHistoryItem"},"type":"array","title":"Redemptions"},"total_redemptions":{"type":"integer","title":"Total Redemptions"},"total_value_redeemed":{"type":"number","title":"Total Value Redeemed"}},"type":"object","required":["redemptions","total_redemptions","total_value_redeemed"],"title":"RedemptionHistoryResponse","description":"User redemption history response"},"RedemptionResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"},"coupon_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Coupon Code"},"coupon_value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Coupon Value"},"previous_balance":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Previous Balance"},"new_balance":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"New Balance"},"error_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Code"}},"type":"object","required":["success","message"],"title":"RedemptionResponse","description":"Coupon redemption response"},"ReferralStatsResponse":{"properties":{"referral_code":{"type":"string","title":"Referral Code"},"invite_link":{"type":"string","title":"Invite Link"},"total_uses":{"type":"integer","title":"Total Uses"},"completed_bonuses":{"type":"integer","title":"Completed Bonuses"},"pending_bonuses":{"type":"integer","title":"Pending Bonuses"},"remaining_uses":{"type":"integer","title":"Remaining Uses"},"max_uses":{"type":"integer","title":"Max Uses"},"total_earned":{"type":"number","title":"Total Earned","description":"Total credits earned from referrals. Referrals no longer grant credits, so this is 0 for referrals completed under the current policy.","default":0.0},"current_balance":{"type":"number","title":"Current Balance"},"referred_by_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Referred By Code"},"referrals":{"items":{},"type":"array","title":"Referrals"}},"type":"object","required":["referral_code","invite_link","total_uses","completed_bonuses","pending_bonuses","remaining_uses","max_uses","current_balance","referred_by_code","referrals"],"title":"ReferralStatsResponse"},"RoleAuditLogResponse":{"properties":{"logs":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Logs"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["logs","total"],"title":"RoleAuditLogResponse"},"RoleResponse":{"properties":{"user_id":{"type":"integer","title":"User Id"},"role":{"type":"string","title":"Role"},"permissions":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Permissions"}},"type":"object","required":["user_id","role","permissions"],"title":"RoleResponse"},"SaveChatMessageRequest":{"properties":{"role":{"type":"string","title":"Role"},"content":{"type":"string","title":"Content"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tokens","default":0},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["role","content"],"title":"SaveChatMessageRequest"},"SaveConversionMetricsRequest":{"properties":{"user_id":{"type":"integer","title":"User Id","description":"User ID who converted"},"api_key_id":{"type":"integer","title":"Api Key Id","description":"API key ID that converted"},"requests_at_conversion":{"type":"integer","minimum":0.0,"title":"Requests At Conversion","description":"Number of requests at conversion"},"tokens_at_conversion":{"type":"integer","minimum":0.0,"title":"Tokens At Conversion","description":"Number of tokens used at conversion"},"credits_used_at_conversion":{"type":"number","minimum":0.0,"title":"Credits Used At Conversion","description":"Credits used at conversion"},"trial_days_used":{"type":"integer","minimum":0.0,"title":"Trial Days Used","description":"Number of days into trial when converted"},"converted_plan":{"type":"string","title":"Converted Plan","description":"Plan name user converted to"},"conversion_trigger":{"type":"string","title":"Conversion Trigger","description":"What triggered the conversion (manual_upgrade, auto_upgrade, etc)","default":"manual_upgrade"}},"type":"object","required":["user_id","api_key_id","requests_at_conversion","tokens_at_conversion","credits_used_at_conversion","trial_days_used","converted_plan"],"title":"SaveConversionMetricsRequest","description":"Request body for POST /admin/trial/save-conversion-metrics"},"SaveConversionMetricsResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"type":"string","title":"Message","default":"Conversion metrics saved successfully"}},"type":"object","title":"SaveConversionMetricsResponse","description":"Response for POST /admin/trial/save-conversion-metrics"},"SaveMessageFeedbackRequest":{"properties":{"session_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Session Id"},"message_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Message Id"},"feedback_type":{"type":"string","enum":["thumbs_up","thumbs_down","regenerate"],"title":"Feedback Type"},"rating":{"anyOf":[{"type":"integer","maximum":5.0,"minimum":1.0},{"type":"null"}],"title":"Rating"},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"}},"type":"object","required":["feedback_type"],"title":"SaveMessageFeedbackRequest"},"SearchAugmentRequest":{"properties":{"query":{"type":"string","minLength":1,"title":"Query","description":"The search query"},"max_results":{"type":"integer","maximum":10.0,"minimum":1.0,"title":"Max Results","description":"Maximum results to return","default":5},"include_answer":{"type":"boolean","title":"Include Answer","description":"Include AI-generated summary","default":true}},"type":"object","required":["query"],"title":"SearchAugmentRequest","description":"Request body for search augmentation."},"SearchAugmentResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Context"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"results_count":{"type":"integer","title":"Results Count","default":0}},"type":"object","required":["success"],"title":"SearchAugmentResponse","description":"Response with formatted search context for prompt injection."},"SearchChatSessionsRequest":{"properties":{"query":{"type":"string","title":"Query"},"limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit","default":20}},"type":"object","required":["query"],"title":"SearchChatSessionsRequest"},"SearchRequest":{"properties":{"target":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target"}},"type":"object","title":"SearchRequest","description":"Search request from Grafana"},"SessionStartEvent":{"properties":{"platform":{"type":"string","title":"Platform","description":"Platform identifier (web, ios, android, desktop)","default":"web"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Optional session metadata (version, referrer, etc.)"}},"type":"object","title":"SessionStartEvent","description":"Session start event model for DAU/WAU/MAU tracking"},"SetRateLimitRequest":{"properties":{"api_key":{"type":"string","title":"Api Key"},"rate_limits":{"$ref":"#/components/schemas/RateLimitConfig"}},"type":"object","required":["api_key","rate_limits"],"title":"SetRateLimitRequest"},"SettingsValidationRequest":{"properties":{"use_code_router":{"type":"boolean","title":"Use Code Router","default":true},"optimization_mode":{"type":"string","title":"Optimization Mode","default":"balanced"},"manual_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Manual Model"}},"type":"object","title":"SettingsValidationRequest","description":"Request to validate code router settings."},"SettingsValidationResponse":{"properties":{"valid":{"type":"boolean","title":"Valid"},"model_string":{"type":"string","title":"Model String"},"errors":{"items":{"type":"string"},"type":"array","title":"Errors","default":[]},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings","default":[]}},"type":"object","required":["valid","model_string"],"title":"SettingsValidationResponse","description":"Response from settings validation."},"ShareLinksListResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"data":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["success","data","count"],"title":"ShareLinksListResponse","description":"Response for listing share links."},"SharedChatPublicView":{"properties":{"success":{"type":"boolean","title":"Success"},"session_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Session Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"messages":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Messages"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["success"],"title":"SharedChatPublicView","description":"Public view of a shared chat."},"StartPartnerTrialRequest":{"properties":{"partner_code":{"type":"string","title":"Partner Code","description":"Partner code (e.g., REDBEARD)"},"signup_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signup Source","description":"UTM or referral source"}},"type":"object","required":["partner_code"],"title":"StartPartnerTrialRequest"},"StreamOptions":{"properties":{"include_usage":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Include Usage"}},"type":"object","title":"StreamOptions","description":"Options for streaming response."},"StripeCurrency":{"type":"string","enum":["usd","eur","gbp","cad","aud"],"title":"StripeCurrency","description":"Supported currencies"},"StripePaymentMethodType":{"type":"string","enum":["card","bank_account","alipay","wechat_pay","ideal","sepa_debit"],"title":"StripePaymentMethodType","description":"Stripe payment method types"},"SubscriptionStatus":{"type":"string","enum":["active","expired","cancelled","trial"],"title":"SubscriptionStatus"},"SyncResponse":{"properties":{"success":{"type":"boolean","title":"Success","description":"Whether sync was successful"},"message":{"type":"string","title":"Message","description":"Human-readable summary message"},"details":{"additionalProperties":true,"type":"object","title":"Details","description":"Detailed sync results"}},"type":"object","required":["success","message","details"],"title":"SyncResponse","description":"Response from sync operation"},"SystemHealthResponse":{"properties":{"overall_status":{"$ref":"#/components/schemas/HealthStatus","description":"Overall system status"},"total_providers":{"type":"integer","title":"Total Providers","description":"Total number of providers","default":0},"healthy_providers":{"type":"integer","title":"Healthy Providers","description":"Number of healthy providers","default":0},"degraded_providers":{"type":"integer","title":"Degraded Providers","description":"Number of degraded providers","default":0},"unhealthy_providers":{"type":"integer","title":"Unhealthy Providers","description":"Number of unhealthy providers","default":0},"total_models":{"type":"integer","title":"Total Models","description":"Total number of models","default":0},"healthy_models":{"type":"integer","title":"Healthy Models","description":"Number of healthy models","default":0},"degraded_models":{"type":"integer","title":"Degraded Models","description":"Number of degraded models","default":0},"unhealthy_models":{"type":"integer","title":"Unhealthy Models","description":"Number of unhealthy models","default":0},"total_gateways":{"type":"integer","title":"Total Gateways","description":"Total number of gateways","default":0},"healthy_gateways":{"type":"integer","title":"Healthy Gateways","description":"Number of healthy gateways","default":0},"tracked_models":{"type":"integer","title":"Tracked Models","description":"Number of models with health data","default":0},"tracked_providers":{"type":"integer","title":"Tracked Providers","description":"Number of providers with health data","default":0},"system_uptime":{"type":"number","title":"System Uptime","description":"System uptime percentage (0-100)","default":0.0},"last_updated":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Updated","description":"Last update timestamp"}},"type":"object","required":["overall_status"],"title":"SystemHealthResponse","description":"Overall system health metrics"},"ToolExecuteRequest":{"properties":{"name":{"type":"string","title":"Name"},"parameters":{"additionalProperties":true,"type":"object","title":"Parameters","default":{}}},"type":"object","required":["name"],"title":"ToolExecuteRequest","description":"Request body for tool execution."},"ToolExecuteResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"result":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Result"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata","default":{}}},"type":"object","required":["success"],"title":"ToolExecuteResponse","description":"Response from tool execution."},"TrialUser":{"properties":{"user_id":{"type":"integer","title":"User Id"},"email":{"type":"string","title":"Email"},"email_domain":{"type":"string","title":"Email Domain"},"api_key_id":{"type":"integer","title":"Api Key Id"},"api_key_preview":{"type":"string","title":"Api Key Preview"},"is_trial":{"type":"boolean","title":"Is Trial"},"trial_start_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Trial Start Date"},"trial_end_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Trial End Date"},"trial_status":{"type":"string","title":"Trial Status"},"trial_days_remaining":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Trial Days Remaining"},"trial_used_tokens":{"type":"integer","title":"Trial Used Tokens","default":0},"trial_max_tokens":{"type":"integer","title":"Trial Max Tokens","default":500000},"trial_token_utilization":{"type":"number","title":"Trial Token Utilization","default":0.0},"trial_used_requests":{"type":"integer","title":"Trial Used Requests","default":0},"trial_max_requests":{"type":"integer","title":"Trial Max Requests","default":1000},"trial_request_utilization":{"type":"number","title":"Trial Request Utilization","default":0.0},"trial_used_credits":{"type":"number","title":"Trial Used Credits","default":0.0},"trial_allocated_credits":{"type":"number","title":"Trial Allocated Credits","default":10.0},"trial_credit_utilization":{"type":"number","title":"Trial Credit Utilization","default":0.0},"trial_converted":{"type":"boolean","title":"Trial Converted","default":false},"conversion_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Conversion Date"},"requests_at_conversion":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Requests At Conversion"},"tokens_at_conversion":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tokens At Conversion"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"signup_ip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signup Ip"},"last_request_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Request At"}},"type":"object","required":["user_id","email","email_domain","api_key_id","api_key_preview","is_trial","trial_start_date","trial_end_date","trial_status","trial_days_remaining","created_at"],"title":"TrialUser","description":"Individual trial user data"},"TrialUsersPagination":{"properties":{"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"},"has_more":{"type":"boolean","title":"Has More"}},"type":"object","required":["total","limit","offset","has_more"],"title":"TrialUsersPagination","description":"Pagination metadata for trial users"},"TrialUsersResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"users":{"items":{"$ref":"#/components/schemas/TrialUser"},"type":"array","title":"Users"},"pagination":{"$ref":"#/components/schemas/TrialUsersPagination"}},"type":"object","required":["users","pagination"],"title":"TrialUsersResponse","description":"Response for GET /admin/trial/users"},"UpdateApiKeyRequest":{"properties":{"key_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Key Name"},"scope_permissions":{"anyOf":[{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object"},{"type":"null"}],"title":"Scope Permissions"},"expiration_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expiration Days"},"max_requests":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Requests"},"ip_allowlist":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Ip Allowlist"},"domain_referrers":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Domain Referrers"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action"},"environment_tag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Environment Tag"}},"type":"object","title":"UpdateApiKeyRequest"},"UpdateChatSessionRequest":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"}},"type":"object","title":"UpdateChatSessionRequest"},"UpdateCouponRequest":{"properties":{"valid_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Valid Until","description":"New expiration date"},"max_uses":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Max Uses","description":"New max uses"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active","description":"Active status"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description","description":"Updated description"}},"type":"object","title":"UpdateCouponRequest","description":"Request to update a coupon"},"UpdateMessageFeedbackRequest":{"properties":{"feedback_type":{"anyOf":[{"type":"string","enum":["thumbs_up","thumbs_down","regenerate"]},{"type":"null"}],"title":"Feedback Type"},"rating":{"anyOf":[{"type":"integer","maximum":5.0,"minimum":1.0},{"type":"null"}],"title":"Rating"},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment"}},"type":"object","title":"UpdateMessageFeedbackRequest","description":"Request schema for updating feedback - all fields are optional."},"UpdateNotificationPreferencesRequest":{"properties":{"email_notifications":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Email Notifications"},"low_balance_threshold":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Low Balance Threshold"},"trial_expiry_reminder_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Trial Expiry Reminder Days"},"plan_expiry_reminder_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Plan Expiry Reminder Days"},"usage_alerts":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Usage Alerts"},"webhook_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Url"}},"type":"object","title":"UpdateNotificationPreferencesRequest","description":"Request to update notification preferences"},"UpdateRoleRequest":{"properties":{"user_id":{"type":"integer","title":"User Id"},"new_role":{"type":"string","title":"New Role"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","required":["user_id","new_role"],"title":"UpdateRoleRequest"},"UpdateWhitelistRequest":{"properties":{"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled","description":"Enable or disable this entry"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason","description":"Update the reason"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At","description":"Update expiration datetime"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Update metadata"}},"type":"object","title":"UpdateWhitelistRequest","description":"Request to update an IP whitelist entry"},"UpgradeSubscriptionRequest":{"properties":{"new_price_id":{"type":"string","title":"New Price Id","description":"Stripe price ID for the new plan"},"new_product_id":{"type":"string","title":"New Product Id","description":"Stripe product ID for the new plan"},"proration_behavior":{"type":"string","title":"Proration Behavior","description":"How to handle proration: create_prorations (default), always_invoice, or none","default":"create_prorations"}},"type":"object","required":["new_price_id","new_product_id"],"title":"UpgradeSubscriptionRequest","description":"Request to upgrade subscription (e.g., Pro -> Max)"},"UptimeMetricsResponse":{"properties":{"status":{"type":"string","title":"Status","description":"Current status"},"uptime_percentage":{"type":"number","title":"Uptime Percentage","description":"Uptime percentage"},"response_time_avg":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Response Time Avg","description":"Average response time"},"last_incident":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Incident","description":"Last incident timestamp"},"total_requests":{"type":"integer","title":"Total Requests","description":"Total requests processed","default":0},"successful_requests":{"type":"integer","title":"Successful Requests","description":"Successful requests","default":0},"failed_requests":{"type":"integer","title":"Failed Requests","description":"Failed requests","default":0},"error_rate":{"type":"number","title":"Error Rate","description":"Error rate percentage","default":0.0},"last_updated":{"type":"string","format":"date-time","title":"Last Updated","description":"Last update timestamp"}},"type":"object","required":["status","uptime_percentage","last_updated"],"title":"UptimeMetricsResponse","description":"Uptime metrics for frontend integration"},"UptimeSample":{"properties":{"timestamp":{"type":"string","format":"date-time","title":"Timestamp","description":"Start timestamp of the time bucket"},"status":{"type":"string","enum":["operational","degraded","downtime"],"title":"Status","description":"Status during this time bucket"},"duration_minutes":{"type":"integer","title":"Duration Minutes","description":"Duration of the bucket in minutes"},"incident":{"anyOf":[{"$ref":"#/components/schemas/IncidentMetadata"},{"type":"null"}],"description":"Incident details if any occurred"}},"type":"object","required":["timestamp","status","duration_minutes"],"title":"UptimeSample","description":"Individual uptime sample for a time bucket"},"UserPlanResponse":{"properties":{"user_plan_id":{"type":"integer","title":"User Plan Id"},"user_id":{"type":"integer","title":"User Id"},"plan_id":{"type":"integer","title":"Plan Id"},"plan_name":{"type":"string","title":"Plan Name"},"plan_description":{"type":"string","title":"Plan Description"},"daily_request_limit":{"type":"integer","title":"Daily Request Limit"},"monthly_request_limit":{"type":"integer","title":"Monthly Request Limit"},"daily_token_limit":{"type":"integer","title":"Daily Token Limit"},"monthly_token_limit":{"type":"integer","title":"Monthly Token Limit"},"price_per_month":{"type":"number","title":"Price Per Month"},"features":{"items":{"type":"string"},"type":"array","title":"Features"},"start_date":{"type":"string","title":"Start Date"},"end_date":{"type":"string","title":"End Date"},"is_active":{"type":"boolean","title":"Is Active"}},"type":"object","required":["user_plan_id","user_id","plan_id","plan_name","plan_description","daily_request_limit","monthly_request_limit","daily_token_limit","monthly_token_limit","price_per_month","features","start_date","end_date","is_active"],"title":"UserPlanResponse"},"UserProfileResponse":{"properties":{"user_id":{"type":"integer","title":"User Id"},"api_key":{"type":"string","title":"Api Key"},"credits":{"type":"number","title":"Credits"},"subscription_allowance":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Subscription Allowance"},"purchased_credits":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Purchased Credits"},"total_credits":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Credits"},"allowance_reset_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Allowance Reset Date"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"auth_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth Method"},"subscription_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subscription Status"},"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier"},"tier_display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier Display Name"},"trial_expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trial Expires At"},"subscription_end_date":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Subscription End Date"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"registration_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registration Date"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"},"settings":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Settings"}},"type":"object","required":["user_id","api_key","credits","username","email","auth_method","subscription_status","trial_expires_at","is_active","registration_date","created_at","updated_at"],"title":"UserProfileResponse"},"UserProfileUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"preferences":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Preferences"},"settings":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Settings"}},"type":"object","title":"UserProfileUpdate"},"UserRegistrationRequest":{"properties":{"username":{"type":"string","title":"Username"},"email":{"type":"string","format":"email","title":"Email"},"auth_method":{"$ref":"#/components/schemas/AuthMethod","default":"email"},"environment_tag":{"type":"string","title":"Environment Tag","default":"live"},"key_name":{"type":"string","title":"Key Name","default":"Primary Key"},"referral_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Referral Code"}},"type":"object","required":["username","email"],"title":"UserRegistrationRequest"},"UserRegistrationResponse":{"properties":{"user_id":{"type":"integer","title":"User Id"},"username":{"type":"string","title":"Username"},"email":{"type":"string","title":"Email"},"api_key":{"type":"string","title":"Api Key"},"credits":{"type":"integer","title":"Credits"},"environment_tag":{"type":"string","title":"Environment Tag"},"scope_permissions":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object","title":"Scope Permissions"},"auth_method":{"$ref":"#/components/schemas/AuthMethod"},"subscription_status":{"$ref":"#/components/schemas/SubscriptionStatus"},"message":{"type":"string","title":"Message"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp"}},"type":"object","required":["user_id","username","email","api_key","credits","environment_tag","scope_permissions","auth_method","subscription_status","message","timestamp"],"title":"UserRegistrationResponse"},"ValidateReferralRequest":{"properties":{"referral_code":{"type":"string","title":"Referral Code","description":"The referral code to validate"}},"type":"object","required":["referral_code"],"title":"ValidateReferralRequest"},"ValidateReferralResponse":{"properties":{"valid":{"type":"boolean","title":"Valid"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"referrer_username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Referrer Username"},"referrer_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Referrer Email"}},"type":"object","required":["valid"],"title":"ValidateReferralResponse"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WhisperJobCreate":{"properties":{"name":{"type":"string","title":"Name","description":"Deployment name"},"market":{"type":"string","title":"Market","description":"GPU market address"},"model":{"type":"string","title":"Model","description":"Whisper model size","default":"large-v3"},"port":{"type":"integer","title":"Port","description":"API port to expose","default":9000},"timeout":{"type":"integer","maximum":360000.0,"minimum":60.0,"title":"Timeout","description":"Deployment timeout in seconds","default":3600},"replicas":{"type":"integer","minimum":1.0,"title":"Replicas","description":"Number of instances","default":1}},"type":"object","required":["name","market"],"title":"WhisperJobCreate","description":"Request model for creating a Whisper transcription deployment"},"WhitelistEntryResponse":{"properties":{"id":{"type":"string","title":"Id"},"ip_address":{"type":"string","title":"Ip Address"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"},"reason":{"type":"string","title":"Reason"},"created_by":{"type":"string","title":"Created By"},"enabled":{"type":"boolean","title":"Enabled"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","ip_address","user_id","reason","created_by","enabled","expires_at","metadata","created_at","updated_at"],"title":"WhitelistEntryResponse","description":"IP whitelist entry response"},"src__routes__code_router__RouteTestRequest":{"properties":{"prompt":{"type":"string","title":"Prompt","description":"The prompt to classify and route"},"mode":{"type":"string","enum":["auto","price","quality","agentic"],"title":"Mode","description":"Routing mode: auto, price, quality, agentic","default":"auto"},"context":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Context","description":"Optional context"}},"type":"object","required":["prompt"],"title":"RouteTestRequest","description":"Request to test code routing without making an actual inference call."},"src__routes__code_router__RouteTestResponse":{"properties":{"model_id":{"type":"string","title":"Model Id"},"provider":{"type":"string","title":"Provider"},"tier":{"type":"integer","title":"Tier"},"task_category":{"type":"string","title":"Task Category"},"complexity":{"type":"string","title":"Complexity"},"confidence":{"type":"number","title":"Confidence"},"mode":{"type":"string","title":"Mode"},"routing_latency_ms":{"type":"number","title":"Routing Latency Ms"},"savings_estimate":{"additionalProperties":true,"type":"object","title":"Savings Estimate"},"model_info":{"additionalProperties":true,"type":"object","title":"Model Info"}},"type":"object","required":["model_id","provider","tier","task_category","complexity","confidence","mode","routing_latency_ms","savings_estimate","model_info"],"title":"RouteTestResponse","description":"Response from route testing."},"src__schemas__general_router__RouteTestRequest":{"properties":{"messages":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Messages","description":"Messages to route"},"mode":{"type":"string","title":"Mode","description":"Routing mode","default":"balanced"}},"type":"object","required":["messages"],"title":"RouteTestRequest","description":"Request to test general routing."},"src__schemas__general_router__RouteTestResponse":{"properties":{"model_id":{"type":"string","title":"Model Id","description":"Selected model ID"},"provider":{"type":"string","title":"Provider","description":"Provider name"},"mode":{"type":"string","title":"Mode","description":"Routing mode used"},"routing_latency_ms":{"type":"number","title":"Routing Latency Ms","description":"Routing decision latency"},"confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Confidence","description":"Routing confidence score (0-1)"},"fallback_used":{"type":"boolean","title":"Fallback Used","description":"Whether fallback was used","default":false},"fallback_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fallback Reason","description":"Reason for fallback if used"}},"type":"object","required":["model_id","provider","mode","routing_latency_ms"],"title":"RouteTestResponse","description":"Response from route testing."}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}