{"openapi":"3.1.0","info":{"title":"Inferbase API","description":"The logical way to select AI models","version":"0.2.0"},"paths":{"/health":{"get":{"tags":["Health"],"summary":"Health Check","description":"Health check endpoint with DB connectivity check.","operationId":"health_check_health_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"tags":["Health"],"summary":"Health Check","description":"Health check endpoint with DB connectivity check.","operationId":"health_check_health_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health/inference":{"get":{"tags":["Health"],"summary":"Inference Health Check","description":"Check inference system readiness: registry loaded, at least one model available.","operationId":"inference_health_check_health_inference_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/":{"get":{"tags":["Root"],"summary":"Root","description":"Root endpoint","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/auth/register":{"post":{"tags":["Authentication"],"summary":"Register","description":"Register a new user\n\nCreates a new user account with the provided email and password.\nReturns a generic success message regardless of whether the email\nalready exists (prevents user enumeration).","operationId":"register_api_v1_auth_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserRegister"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Register Api V1 Auth Register Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/login":{"post":{"tags":["Authentication"],"summary":"Login","description":"Login user and return JWT tokens.\n\nAuthenticates user with email and password. Returns tokens in both\nthe response body (for tests/API clients) and httpOnly cookies (for browsers).","operationId":"login_api_v1_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserLogin"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/logout":{"post":{"tags":["Authentication"],"summary":"Logout","description":"Logout user and revoke access + refresh tokens.\n\nReads tokens from cookies or headers. Clears all auth cookies.","operationId":"logout_api_v1_auth_logout_post","requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/LogoutRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/auth/refresh":{"post":{"tags":["Authentication"],"summary":"Refresh Token","description":"Refresh access token using refresh token.\n\nReads refresh token from body or cookie. Returns new tokens in both\nthe response body and httpOnly cookies.","operationId":"refresh_token_api_v1_auth_refresh_post","requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/TokenRefresh"},{"type":"null"}],"title":"Token Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/me":{"get":{"tags":["Authentication"],"summary":"Get Current User Info","description":"Get current authenticated user information\n\nReturns the profile information of the currently authenticated user.","operationId":"get_current_user_info_api_v1_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/auth/forgot-password":{"post":{"tags":["Authentication"],"summary":"Forgot Password","description":"Request a password reset email.\n\nAlways returns success to prevent email enumeration.","operationId":"forgot_password_api_v1_auth_forgot_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordResetRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Forgot Password Api V1 Auth Forgot Password Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/reset-password":{"post":{"tags":["Authentication"],"summary":"Reset Password","description":"Reset password using a token from the reset email.\n\nValidates the JWT token and its phash claim to ensure the token\nhasn't been invalidated by a prior password change.","operationId":"reset_password_api_v1_auth_reset_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordReset"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Reset Password Api V1 Auth Reset Password Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/verify-email":{"post":{"tags":["Authentication"],"summary":"Verify Email","description":"Verify email address using a token from the verification email.","operationId":"verify_email_api_v1_auth_verify_email_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailVerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Verify Email Api V1 Auth Verify Email Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/resend-verification":{"post":{"tags":["Authentication"],"summary":"Resend Verification","description":"Resend verification email. Requires authentication.","operationId":"resend_verification_api_v1_auth_resend_verification_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Resend Verification Api V1 Auth Resend Verification Post"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/models":{"get":{"tags":["Models"],"summary":"List Models","description":"List AI models with filtering and pagination.\n\nSupports both offset (page/page_size) and cursor-based pagination.\nWhen cursor is provided, it takes precedence over the page parameter.","operationId":"list_models_api_v1_models_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"model_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Type"}},{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"}},{"name":"provider_slug","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by provider slug (alias for provider)","title":"Provider Slug"},"description":"Filter by provider slug (alias for provider)"},{"name":"license","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by license (e.g. proprietary, apache-2.0, mit, llama-3.1)","title":"License"},"description":"Filter by license (e.g. proprietary, apache-2.0, mit, llama-3.1)"},{"name":"modality","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by input modality (text, image, audio, video)","title":"Modality"},"description":"Filter by input modality (text, image, audio, video)"},{"name":"capability","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by capability (function_calling, streaming, etc.)","title":"Capability"},"description":"Filter by capability (function_calling, streaming, etc.)"},{"name":"min_context_window","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum context window size","title":"Min Context Window"},"description":"Minimum context window size"},{"name":"min_param_count","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum parameter count","title":"Min Param Count"},"description":"Minimum parameter count"},{"name":"max_param_count","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum parameter count","title":"Max Param Count"},"description":"Maximum parameter count"},{"name":"is_open_source","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by open-source status","title":"Is Open Source"},"description":"Filter by open-source status"},{"name":"inference_available","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by inference availability","title":"Inference Available"},"description":"Filter by inference availability"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort by field: name, provider, context_window, like_count, updated_at","default":"updated_at","title":"Sort By"},"description":"Sort by field: name, provider, context_window, like_count, updated_at"},{"name":"sort_order","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort order: asc or desc","default":"desc","title":"Sort Order"},"description":"Sort order: asc or desc"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for keyset pagination (takes precedence over page)","title":"Cursor"},"description":"Cursor for keyset pagination (takes precedence over page)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AIModelListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/models/filters/options":{"get":{"tags":["Models"],"summary":"Get Filter Options","description":"Get available filter options aggregated from the database.\n\nReturns:\n- creators: List of creators with logos and model counts\n- input_modalities: Unique input modality values\n- output_modalities: Unique output modality values\n- capabilities: Unique capability values\n- model_types: Unique model type values\n- context_window: Min/max context window range\n- input_price/output_price: Min/max price ranges\n- total_models: Total visible model count","operationId":"get_filter_options_api_v1_models_filters_options_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilterOptionsResponse"}}}}}}},"/api/v1/models/{slug}":{"get":{"tags":["Models"],"summary":"Get Model","description":"Get AI model details by slug.\n\nReads from the `models` golden table and joins host-specific pricing\nfrom `model_pricing`. Slug redirects are handled by middleware.","operationId":"get_model_api_v1_models__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/AIModelDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/models/provider/{provider}":{"get":{"tags":["Models"],"summary":"List Models By Provider","description":"List AI models by provider (e.g., 'google', 'openai').","operationId":"list_models_by_provider_api_v1_models_provider__provider__get","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AIModelListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/benchmarks/model/{model_slug}":{"get":{"tags":["Benchmarks"],"summary":"Get Model Benchmarks","description":"Get all benchmark scores for a specific model.\n\nReturns benchmarks both as a flat list and grouped by category.","operationId":"get_model_benchmarks_api_v1_benchmarks_model__model_slug__get","parameters":[{"name":"model_slug","in":"path","required":true,"schema":{"type":"string","title":"Model Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelBenchmarksResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/benchmarks":{"get":{"tags":["Benchmarks"],"summary":"List Benchmarks","description":"List available benchmarks.\n\nReturns benchmark definitions based on the metadata configuration.","operationId":"list_benchmarks_api_v1_benchmarks_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by category","title":"Category"},"description":"Filter by category"},{"name":"is_primary","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by primary status","title":"Is Primary"},"description":"Filter by primary status"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/benchmarks/categories":{"get":{"tags":["Benchmarks"],"summary":"Get Benchmark Categories","description":"Get benchmarks grouped by category.","operationId":"get_benchmark_categories_api_v1_benchmarks_categories_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkCategoriesResponse"}}}}}}},"/api/v1/metadata":{"get":{"tags":["Metadata"],"summary":"Get Metadata","description":"Get all UI metadata for frontend configuration.\n\nThis endpoint provides:\n- Capability definitions (for displaying model capabilities)\n- Benchmark category definitions (for grouping and styling benchmarks)\n- Host names (for displaying pricing sources)\n\nFrontend clients should cache this response as it changes infrequently.","operationId":"get_metadata_api_v1_metadata_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetadataResponse"}}}}}}},"/api/v1/metadata/capabilities":{"get":{"tags":["Metadata"],"summary":"Get Capabilities","description":"Get capability definitions only.","operationId":"get_capabilities_api_v1_metadata_capabilities_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CapabilityMetadata"},"type":"array","title":"Response Get Capabilities Api V1 Metadata Capabilities Get"}}}}}}},"/api/v1/metadata/benchmark-categories":{"get":{"tags":["Metadata"],"summary":"Get Benchmark Categories","description":"Get benchmark category definitions only.","operationId":"get_benchmark_categories_api_v1_metadata_benchmark_categories_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/BenchmarkCategoryMetadata"},"type":"array","title":"Response Get Benchmark Categories Api V1 Metadata Benchmark Categories Get"}}}}}}},"/api/v1/metadata/hosts":{"get":{"tags":["Metadata"],"summary":"Get Hosts","description":"Get host/provider name mappings only.","operationId":"get_hosts_api_v1_metadata_hosts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/HostMetadata"},"type":"array","title":"Response Get Hosts Api V1 Metadata Hosts Get"}}}}}}},"/api/v1/gpus":{"get":{"tags":["GPUs"],"summary":"List Gpus","description":"List all GPUs with optional filters.\n\nSupports both offset (page/page_size) and cursor-based pagination.\nReturns paginated list of GPUs sorted by VRAM (descending).","operationId":"list_gpus_api_v1_gpus_get","parameters":[{"name":"manufacturer","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by manufacturer (e.g., NVIDIA, AMD)","title":"Manufacturer"},"description":"Filter by manufacturer (e.g., NVIDIA, AMD)"},{"name":"gpu_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/GPUTypeEnum"},{"type":"null"}],"description":"Filter by GPU type","title":"Gpu Type"},"description":"Filter by GPU type"},{"name":"min_vram","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"Minimum VRAM in GB","title":"Min Vram"},"description":"Minimum VRAM in GB"},{"name":"max_vram","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"Maximum VRAM in GB","title":"Max Vram"},"description":"Maximum VRAM in GB"},{"name":"min_fp16","in":"query","required":false,"schema":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"Minimum FP16 TFLOPS","title":"Min Fp16"},"description":"Minimum FP16 TFLOPS"},{"name":"min_bandwidth","in":"query","required":false,"schema":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"Minimum memory bandwidth in GB/s","title":"Min Bandwidth"},"description":"Minimum memory bandwidth in GB/s"},{"name":"min_tdp","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"Minimum TDP in watts","title":"Min Tdp"},"description":"Minimum TDP in watts"},{"name":"max_tdp","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"Maximum TDP in watts","title":"Max Tdp"},"description":"Maximum TDP in watts"},{"name":"architecture","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by architecture (e.g., Hopper, Ada Lovelace)","title":"Architecture"},"description":"Filter by architecture (e.g., Hopper, Ada Lovelace)"},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by active status","default":true,"title":"Is Active"},"description":"Filter by active status"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search in name, manufacturer, architecture","title":"Search"},"description":"Search in name, manufacturer, architecture"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":50,"title":"Page Size"},"description":"Items per page"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for keyset pagination (takes precedence over page)","title":"Cursor"},"description":"Cursor for keyset pagination (takes precedence over page)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPUListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/gpus/manufacturers":{"get":{"tags":["GPUs"],"summary":"List Manufacturers","description":"Get list of GPU manufacturers with details (logos, descriptions).","operationId":"list_manufacturers_api_v1_gpus_manufacturers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPUManufacturerListResponse"}}}}}}},"/api/v1/gpus/architectures":{"get":{"tags":["GPUs"],"summary":"List Architectures","description":"Get list of unique GPU architectures.","operationId":"list_architectures_api_v1_gpus_architectures_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array","title":"Response List Architectures Api V1 Gpus Architectures Get"}}}}}}},"/api/v1/gpus/search":{"get":{"tags":["GPUs"],"summary":"Search Gpus","description":"Search GPUs by name, manufacturer, or architecture.","operationId":"search_gpus_api_v1_gpus_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"description":"Search query","title":"Q"},"description":"Search query"},{"name":"gpu_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/GPUTypeEnum"},{"type":"null"}],"description":"Filter by GPU type","title":"Gpu Type"},"description":"Filter by GPU type"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"Items per page","default":20,"title":"Page Size"},"description":"Items per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPUListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/gpus/pricing":{"get":{"tags":["GPUs"],"summary":"List Gpu Pricing","description":"Get cloud pricing for all GPUs. Returns per-provider hourly rates.","operationId":"list_gpu_pricing_api_v1_gpus_pricing_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPUPricingListResponse"}}}}}}},"/api/v1/gpus/{slug}":{"get":{"tags":["GPUs"],"summary":"Get Gpu","description":"Get GPU details by slug.","operationId":"get_gpu_api_v1_gpus__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/GPUDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/gpus/{slug}/pricing":{"get":{"tags":["GPUs"],"summary":"Get Gpu Pricing","description":"Get cloud pricing for a specific GPU.","operationId":"get_gpu_pricing_api_v1_gpus__slug__pricing_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GPUPricingItem"},"title":"Response Get Gpu Pricing Api V1 Gpus  Slug  Pricing Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tools/compare":{"post":{"tags":["Tools","Tools"],"summary":"Compare Models","description":"Compare multiple AI models side by side.\n\nAccepts 2-5 model slugs and returns:\n- Full details for each model\n- Comparison insights (pricing, capabilities, context)\n\nExample request:\n```json\n{\n    \"model_slugs\": [\"gpt-4o\", \"claude-3-5-sonnet\"]\n}\n```","operationId":"compare_models_api_v1_tools_compare_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompareRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompareResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/tools/recommend/options":{"get":{"tags":["Tools","Tools"],"summary":"Get Wizard Options","description":"Get wizard configuration, industries, use cases, scales, priorities.\n\nReads from the wizard_config DB table. Admin-editable without code deploys.\nFalls back to Python defaults if table is empty.","operationId":"get_wizard_options_api_v1_tools_recommend_options_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WizardOptionsResponse"}}}}}}},"/api/v1/tools/recommend":{"post":{"tags":["Tools","Tools"],"summary":"Get Wizard Recommendations","description":"Get AI model recommendations based on wizard inputs.\n\nTakes user selections from the use-case wizard (industry, use case, scale, priorities)\nand returns scored model recommendations.\n\nExample request:\n```json\n{\n    \"category\": \"software-technology\",\n    \"use_case\": \"code-generation\",\n    \"scale\": \"startup\",\n    \"priorities\": [\"quality\", \"cost\"]\n}\n```\n\nReturns top 5 recommended models with:\n- Match scores (total, capability, benchmark, cost, popularity)\n- Reasoning explaining the recommendation\n- Strengths and trade-offs\n- Pricing and spec details","operationId":"get_wizard_recommendations_api_v1_tools_recommend_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WizardRecommendRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WizardRecommendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/tools/sizing/calculate":{"post":{"tags":["Tools","Tools"],"summary":"Calculate Gpu Sizing","description":"Compute ranked GPU configurations that satisfy the workload.\n\nApplies the same physics-based engine used by the interactive tool at\n/gpu-capacity-planning. The response includes memory budget, throughput\nestimates (decode + prefill), latency percentiles, batching capacity,\nand monthly cost across the cheapest available cloud provider per GPU.\n\nResults are sorted by:\n1. Whether the configuration meets the P95 latency target\n2. Fewer GPUs (operational simplicity)\n3. Higher VRAM utilization (better fit)\n4. Higher decode throughput (final tiebreaker)\n\nThe top result is flagged with `is_recommended: true` and every result\nincludes a `reasoning` field explaining its rank position.\n\nExample minimal request:\n\n```json\n{\n  \"param_count\": 70000000000,\n  \"quantization\": \"fp16\",\n  \"context_length\": 8192,\n  \"workload\": {\n    \"requests_per_second\": 10,\n    \"avg_input_tokens\": 1000,\n    \"avg_output_tokens\": 500,\n    \"concurrency\": 50,\n    \"latency_target_ms\": 3000\n  }\n}\n```","operationId":"calculate_gpu_sizing_api_v1_tools_sizing_calculate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SizingRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SizingResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/dashboard":{"get":{"tags":["Admin","Admin - Dashboard"],"summary":"Get dashboard statistics","description":"Retrieve overview statistics and recent activity for the admin dashboard.","operationId":"get_dashboard_api_v1_admin_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/models":{"get":{"tags":["Admin","Admin - Models"],"summary":"List Models","description":"List all AI models with pagination and filtering.","operationId":"list_models_api_v1_admin_models_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"model_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Type"}},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},{"name":"is_featured","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Featured"}},{"name":"inference_available","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Inference Available"}},{"name":"creator","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Creator"}},{"name":"seen_in_source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Seen In Source"}},{"name":"created_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"}},{"name":"enrichment_level","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by enrichment level: low (<50%), medium (50-79%), high (80%+), or complete (100%)","title":"Enrichment Level"},"description":"Filter by enrichment level: low (<50%), medium (50-79%), high (80%+), or complete (100%)"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","default":"updated_at","title":"Sort By"}},{"name":"sort_order","in":"query","required":false,"schema":{"type":"string","default":"desc","title":"Sort Order"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_ModelAdminListItem_"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}},"post":{"tags":["Admin","Admin - Models"],"summary":"Create Model","description":"Create a new AI model.","operationId":"create_model_api_v1_admin_models_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelAdminCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelAdminDetail"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/models/{model_id}":{"get":{"tags":["Admin","Admin - Models"],"summary":"Get Model","description":"Get AI model by ID.","operationId":"get_model_api_v1_admin_models__model_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Model Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelAdminDetail"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}},"put":{"tags":["Admin","Admin - Models"],"summary":"Update Model","description":"Update AI model.","operationId":"update_model_api_v1_admin_models__model_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Model Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelAdminUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelAdminDetail"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}},"delete":{"tags":["Admin","Admin - Models"],"summary":"Delete Model","description":"Hard-delete a Model row.\n\nMirrors models_bulk._async_bulk_action for action='delete'. CASCADE on\nthe models FK clears source_versions / pricing / benchmarks / aliases /\nroutes / ingestion_errors. model_identities references models via a\nnullable model_id with ON DELETE SET NULL, so identities are deleted\nexplicitly first.\n\nThe old soft-delete path wrote is_visible=False directly, which fought\nthe Materializer-owned visibility invariant — the model would either\nre-flip to visible on the next materialize touching it, or sit forever\nas a zombie that the catalog ignored anyway.","operationId":"delete_model_api_v1_admin_models__model_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Model Id"}}],"responses":{"204":{"description":"Successful Response"},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/models/{model_id}/hosts":{"get":{"tags":["Admin","Admin - Models"],"summary":"Get Model Hosts","description":"Get per-platform pricing rows for a model.\n\nEndpoint kept the legacy \"hosts\" name for frontend compatibility. Reads\ndirectly from model_pricing — the model_offerings projection was\ndropped in May 2026.","operationId":"get_model_hosts_api_v1_admin_models__model_id__hosts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Model Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/models/{model_id}/visibility":{"patch":{"tags":["Admin","Admin - Models"],"summary":"Set Model Visibility","description":"Set the tri-state `admin_visibility_override` on a base.\n\nNULL -> derive from creator vouch; True -> force visible (vouch a vendor-only\nbase; the `adopt-served-orphans` successor); False -> force hidden (hide a\ncreator-backed base). is_visible = COALESCE(override, has_creator_vouch) is\nrecomputed by the DB trigger.\n\nHIDE = unlist + stop serving, reversibly: if the new override would make the\nbase invisible while it still has active routes, those routes are auto-disabled\nfirst (status='disabled', NOT deleted), so re-vouching + re-enabling restores\nthem. (Hard-delete remains the only path that destroys the row.)","operationId":"set_model_visibility_api_v1_admin_models__model_id__visibility_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Model Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelVisibilityUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelAdminDetail"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/models/bulk":{"post":{"tags":["Admin","Admin - Models"],"summary":"Bulk Model Action","description":"Perform bulk operations on AI models.","operationId":"bulk_model_action_api_v1_admin_models_bulk_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkActionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkActionResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/models/options/providers":{"get":{"tags":["Admin","Admin - Models"],"summary":"Get Provider Options","description":"Get unique creator values from models.\n\nUsed for the \"All Creators\" filter dropdown on the models list page.\nReturns list of {slug, name, count} sorted by count descending.\nDisplay names are fetched from the creators table.","operationId":"get_provider_options_api_v1_admin_models_options_providers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Response Get Provider Options Api V1 Admin Models Options Providers Get"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/users":{"get":{"tags":["Admin","Admin - Users"],"summary":"List Users","description":"List all users with pagination and filtering.","operationId":"list_users_api_v1_admin_users_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search in email or name","title":"Search"},"description":"Search in email or name"},{"name":"tier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by tier","title":"Tier"},"description":"Filter by tier"},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},{"name":"is_admin","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Admin"}},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","default":"created_at","title":"Sort By"}},{"name":"sort_order","in":"query","required":false,"schema":{"type":"string","default":"desc","title":"Sort Order"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_UserAdminListItem_"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}},"post":{"tags":["Admin","Admin - Users"],"summary":"Create User","description":"Create a new user (admin only).","operationId":"create_user_api_v1_admin_users_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAdminCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAdminDetail"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/users/{user_id}":{"get":{"tags":["Admin","Admin - Users"],"summary":"Get User","description":"Get user by ID with actual favorite and comparison counts.","operationId":"get_user_api_v1_admin_users__user_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAdminDetail"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}},"put":{"tags":["Admin","Admin - Users"],"summary":"Update User","description":"Update user (admin can update tier, status, admin flag).","operationId":"update_user_api_v1_admin_users__user_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAdminUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAdminDetail"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}},"delete":{"tags":["Admin","Admin - Users"],"summary":"Delete User","description":"Soft-delete a user. Sets is_active=False which blocks new auth requests\n(get_current_user 403s on inactive). Preserves the row + inference_usage_logs\n+ api_keys so admin can audit usage and billing history.","operationId":"delete_user_api_v1_admin_users__user_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"204":{"description":"Successful Response"},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/users/bulk":{"post":{"tags":["Admin","Admin - Users"],"summary":"Bulk User Action","description":"Perform bulk operations on users.\n\nActions: activate, deactivate, delete","operationId":"bulk_user_action_api_v1_admin_users_bulk_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkActionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkActionResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/users/{user_id}/toggle-admin":{"post":{"tags":["Admin","Admin - Users"],"summary":"Toggle Admin Status","description":"Toggle a user's admin status.","operationId":"toggle_admin_status_api_v1_admin_users__user_id__toggle_admin_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToggleAdminRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAdminDetail"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/users/{user_id}/favorites":{"get":{"tags":["Admin","Admin - Users"],"summary":"List User Favorites","description":"List a user's favorite models (admin view).","operationId":"list_user_favorites_api_v1_admin_users__user_id__favorites_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserFavoritesAdminResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/users/{user_id}/activity":{"get":{"tags":["Admin","Admin - Users"],"summary":"List User Activity","description":"List a user's activity history (admin view).","operationId":"list_user_activity_api_v1_admin_users__user_id__activity_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Page Size"}},{"name":"action","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by action type","title":"Action"},"description":"Filter by action type"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserActivityAdminResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/users/{user_id}/reset-password":{"post":{"tags":["Admin","Admin - Users"],"summary":"Reset User Password","description":"Admin reset user password (sets new password directly).","operationId":"reset_user_password_api_v1_admin_users__user_id__reset_password_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminPasswordResetRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Reset User Password Api V1 Admin Users  User Id  Reset Password Post"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/activity":{"get":{"tags":["Admin","Admin - Activity"],"summary":"List Activity","description":"List activity logs with pagination and filtering.\n\nArgs:\n    page: Page number\n    page_size: Items per page\n    user_id: Optional filter by user\n    action: Optional filter by action type\n    resource_type: Optional filter by resource type\n    start_date: Optional filter by start date\n    end_date: Optional filter by end date\n    admin_only: Show only admin actions (actions starting with 'admin_')\n    admin: Authenticated admin user\n    db: Database session\n\nReturns:\n    Paginated list of activity logs","operationId":"list_activity_api_v1_admin_activity_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Page Size"}},{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by user ID","title":"User Id"},"description":"Filter by user ID"},{"name":"action","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by action type","title":"Action"},"description":"Filter by action type"},{"name":"resource_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by resource type","title":"Resource Type"},"description":"Filter by resource type"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter by start date","title":"Start Date"},"description":"Filter by start date"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter by end date","title":"End Date"},"description":"Filter by end date"},{"name":"admin_only","in":"query","required":false,"schema":{"type":"boolean","description":"Show only admin actions","default":false,"title":"Admin Only"},"description":"Show only admin actions"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_ActivityLogItem_"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/raw/snapshots":{"get":{"tags":["Admin","Admin - Raw Data"],"summary":"List raw snapshots (v3)","description":"List raw snapshots with pagination (v3 architecture).","operationId":"list_raw_snapshots_api_v1_admin_raw_snapshots_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by API source slug","title":"Api Source"},"description":"Filter by API source slug"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search by model name or source ID","title":"Search"},"description":"Search by model name or source ID"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}},"delete":{"tags":["Admin","Admin - Raw Data"],"summary":"Delete all raw snapshots","description":"Delete all raw snapshots.\n\nWARNING: This is a destructive operation that cannot be undone.","operationId":"delete_all_raw_snapshots_api_v1_admin_raw_snapshots_delete","security":[{"HTTPBearer":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteAllResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/raw/snapshots/{snapshot_id}":{"get":{"tags":["Admin","Admin - Raw Data"],"summary":"Get raw snapshot detail with payload","description":"Get a single raw snapshot including its full payload for validation.","operationId":"get_raw_snapshot_api_v1_admin_raw_snapshots__snapshot_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"snapshot_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Snapshot Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RawSnapshotDetail"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/raw/snapshots/by-source/{api_source}":{"delete":{"tags":["Admin","Admin - Raw Data"],"summary":"Delete raw snapshots for a specific source","description":"Delete all raw snapshots for a specific API source.\n\nWARNING: This is a destructive operation that cannot be undone.","operationId":"delete_snapshots_by_source_api_v1_admin_raw_snapshots_by_source__api_source__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_source","in":"path","required":true,"schema":{"type":"string","title":"Api Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteAllResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/creators":{"get":{"tags":["Admin","Admin - Creators"],"summary":"List all creators","description":"Returns all creators with model counts, origin type, and discovery sources.","operationId":"list_creators_api_v1_admin_creators_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatorsListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin","Admin - Creators"],"summary":"Delete all creators","description":"Delete all creators and their aliases. WARNING: This is destructive!","operationId":"delete_all_creators_api_v1_admin_creators_delete","security":[{"HTTPBearer":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/creators/{slug}":{"get":{"tags":["Admin","Admin - Creators"],"summary":"Get creator details","description":"Returns full creator details including all aliases.","operationId":"get_creator_api_v1_admin_creators__slug__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatorDetail"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}},"put":{"tags":["Admin","Admin - Creators"],"summary":"Update creator","description":"Update creator information (display name, description, URLs, etc.)","operationId":"update_creator_api_v1_admin_creators__slug__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatorUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatorDetail"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}},"delete":{"tags":["Admin","Admin - Creators"],"summary":"Delete a creator","description":"Delete a specific creator and its aliases.","operationId":"delete_creator_api_v1_admin_creators__slug__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/creators/{slug}/prefixes":{"put":{"tags":["Admin","Admin - Creators"],"summary":"Update known_prefixes for a creator","description":"Replaces the full list of source-prefix → creator mappings used by the IdentityResolver. Adding a prefix here unblocks ingestion errors with reason='unknown_creator' for any source_model_id starting with that prefix.","operationId":"update_creator_prefixes_api_v1_admin_creators__slug__prefixes_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatorPrefixesUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatorPrefixesResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/scraper/scrape":{"post":{"tags":["Admin","Admin - Web Scraper","Admin - Web Scraper"],"summary":"Scrape Url","description":"Scrape a URL and return raw text content.\n\nUses Playwright to render JS-heavy pages. Returns the visible text\ncontent for review before optional AI extraction.\n\n**Expand/Tab Support:**\n- Use `expand_selectors` to click buttons that reveal hidden content\n  (e.g., `[\"text=Expand to learn more\", \".expand-btn\"]`)\n- Set `click_tabs=true` to iterate through tabbed content and aggregate\n- Customize `tab_selector` for non-standard tab implementations\n- Use `skip_tab_texts` to skip certain tabs (default: [\"More\"])","operationId":"scrape_url_api_v1_admin_scraper_scrape_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScrapeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScrapeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/scraper/extract/basic":{"post":{"tags":["Admin","Admin - Web Scraper","Admin - Web Scraper"],"summary":"Extract Models Basic","description":"Extract structured AI model data using pattern matching (no AI).\n\nFast extraction using regex patterns. Works for common formats\nbut may miss some models or details.","operationId":"extract_models_basic_api_v1_admin_scraper_extract_basic_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtractRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtractResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/scraper/extract":{"post":{"tags":["Admin","Admin - Web Scraper","Admin - Web Scraper"],"summary":"Extract Models","description":"Extract structured AI model data from text using Claude AI.\n\nTakes raw text content (from scrape or manual paste) and uses\nClaude to intelligently extract model information.","operationId":"extract_models_api_v1_admin_scraper_extract_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtractRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtractResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/gpus/stats":{"get":{"tags":["Admin","Admin - GPUs"],"summary":"Get Gpu Stats","description":"Get GPU statistics (global counts).","operationId":"get_gpu_stats_api_v1_admin_gpus_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/gpus":{"get":{"tags":["Admin","Admin - GPUs"],"summary":"List Gpus","description":"List all GPUs (admin view - includes inactive).","operationId":"list_gpus_api_v1_admin_gpus_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"manufacturer","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Manufacturer"}},{"name":"gpu_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/GPUTypeEnum"},{"type":"null"}],"title":"Gpu Type"}},{"name":"min_vram","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Min Vram"}},{"name":"max_vram","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Max Vram"}},{"name":"architecture","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Architecture"}},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPUListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin","Admin - GPUs"],"summary":"Create Gpu","description":"Create a new GPU.","operationId":"create_gpu_api_v1_admin_gpus_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPUCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPUDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/gpus/{gpu_id}":{"get":{"tags":["Admin","Admin - GPUs"],"summary":"Get Gpu","description":"Get GPU by ID.","operationId":"get_gpu_api_v1_admin_gpus__gpu_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"gpu_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Gpu Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPUDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Admin","Admin - GPUs"],"summary":"Update Gpu","description":"Update a GPU.","operationId":"update_gpu_api_v1_admin_gpus__gpu_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"gpu_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Gpu Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPUUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPUDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin","Admin - GPUs"],"summary":"Delete Gpu","description":"Delete a GPU.","operationId":"delete_gpu_api_v1_admin_gpus__gpu_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"gpu_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Gpu Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/gpus/bulk":{"post":{"tags":["Admin","Admin - GPUs"],"summary":"Create Gpus Bulk","description":"Create multiple GPUs at once.","operationId":"create_gpus_bulk_api_v1_admin_gpus_bulk_post","requestBody":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/GPUCreate"},"type":"array","title":"Gpus"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/GPUDetail"},"type":"array","title":"Response Create Gpus Bulk Api V1 Admin Gpus Bulk Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/gpus/{gpu_id}/toggle-active":{"patch":{"tags":["Admin","Admin - GPUs"],"summary":"Toggle Gpu Active","description":"Toggle GPU active status.","operationId":"toggle_gpu_active_api_v1_admin_gpus__gpu_id__toggle_active_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"gpu_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Gpu Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPUDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/gpus/export":{"get":{"tags":["Admin","Admin - GPUs Import/Export"],"summary":"Export Gpus","description":"Export GPU data as CSV for bulk editing.\n\nThe exported file includes all GPU fields.\nUse as a template for importing new GPUs or updating existing ones.","operationId":"export_gpus_api_v1_admin_gpus_export_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"gpu_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by GPU type","title":"Gpu Type"},"description":"Filter by GPU type"},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by active status","title":"Is Active"},"description":"Filter by active status"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/gpus/preview":{"post":{"tags":["Admin","Admin - GPUs Import/Export"],"summary":"Preview Gpu Import","description":"Preview import changes without applying them.\n\n- If a row has an 'id' or 'slug', it will update that existing GPU\n- If no id/slug or not found, it will create a new GPU","operationId":"preview_gpu_import_api_v1_admin_gpus_preview_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_preview_gpu_import_api_v1_admin_gpus_preview_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPUImportPreviewResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/gpus/import":{"post":{"tags":["Admin","Admin - GPUs Import/Export"],"summary":"Import Gpus","description":"Import CSV file to create or update GPUs.\n\n- If a row has an 'id' or 'slug' matching an existing GPU, it updates that GPU\n- Otherwise, it creates a new GPU\n- Empty cells are skipped by default (won't clear existing values)","operationId":"import_gpus_api_v1_admin_gpus_import_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skip_empty","in":"query","required":false,"schema":{"type":"boolean","description":"Skip empty cells (don't clear existing values)","default":true,"title":"Skip Empty"},"description":"Skip empty cells (don't clear existing values)"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_import_gpus_api_v1_admin_gpus_import_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPUImportResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/gpu-manufacturers":{"get":{"tags":["Admin","Admin - GPU Manufacturers","admin-gpu-manufacturers"],"summary":"List Gpu Manufacturers","description":"List all GPU manufacturers with GPU counts (paginated).","operationId":"list_gpu_manufacturers_api_v1_admin_gpu_manufacturers_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPUManufacturerListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin","Admin - GPU Manufacturers","admin-gpu-manufacturers"],"summary":"Create Gpu Manufacturer","description":"Create a new GPU manufacturer.","operationId":"create_gpu_manufacturer_api_v1_admin_gpu_manufacturers_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPUManufacturerCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPUManufacturerDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/gpu-manufacturers/{slug}":{"get":{"tags":["Admin","Admin - GPU Manufacturers","admin-gpu-manufacturers"],"summary":"Get Gpu Manufacturer","description":"Get GPU manufacturer details by slug.","operationId":"get_gpu_manufacturer_api_v1_admin_gpu_manufacturers__slug__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPUManufacturerDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin","Admin - GPU Manufacturers","admin-gpu-manufacturers"],"summary":"Update Gpu Manufacturer","description":"Update a GPU manufacturer.","operationId":"update_gpu_manufacturer_api_v1_admin_gpu_manufacturers__slug__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPUManufacturerUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPUManufacturerDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin","Admin - GPU Manufacturers","admin-gpu-manufacturers"],"summary":"Delete Gpu Manufacturer","description":"Delete a GPU manufacturer.","operationId":"delete_gpu_manufacturer_api_v1_admin_gpu_manufacturers__slug__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/gpu-manufacturers/{slug}/toggle-active":{"patch":{"tags":["Admin","Admin - GPU Manufacturers","admin-gpu-manufacturers"],"summary":"Toggle Manufacturer Active","description":"Toggle the is_active status of a GPU manufacturer.","operationId":"toggle_manufacturer_active_api_v1_admin_gpu_manufacturers__slug__toggle_active_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPUManufacturerDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/model-hosts":{"get":{"tags":["Admin","Admin - Model Hosts"],"summary":"List Model Hosts","description":"List all model pricing entries.","operationId":"list_model_hosts_api_v1_admin_model_hosts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"host_slug","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by platform slug (backward compat param name)","title":"Host Slug"},"description":"Filter by platform slug (backward compat param name)"},{"name":"platform_slug","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform Slug"}},{"name":"is_available","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Available"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelHostsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin","Admin - Model Hosts"],"summary":"Create Model Host","description":"Create a new model pricing entry.","operationId":"create_model_host_api_v1_admin_model_hosts_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelHostCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelHostDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/model-hosts/stats":{"get":{"tags":["Admin","Admin - Model Hosts"],"summary":"Get Model Hosts Stats","description":"Get model pricing statistics.","operationId":"get_model_hosts_stats_api_v1_admin_model_hosts_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/model-hosts/models":{"get":{"tags":["Admin","Admin - Model Hosts"],"summary":"List Models For Dropdown","description":"List model identities for dropdown selection.","operationId":"list_models_for_dropdown_api_v1_admin_model_hosts_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ModelOption"},"type":"array","title":"Response List Models For Dropdown Api V1 Admin Model Hosts Models Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/model-hosts/{model_host_id}":{"get":{"tags":["Admin","Admin - Model Hosts"],"summary":"Get Model Host","description":"Get a single pricing entry by ID.","operationId":"get_model_host_api_v1_admin_model_hosts__model_host_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_host_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Model Host Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelHostDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Admin","Admin - Model Hosts"],"summary":"Update Model Host","description":"Update a pricing entry.","operationId":"update_model_host_api_v1_admin_model_hosts__model_host_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_host_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Model Host Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelHostUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelHostDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin","Admin - Model Hosts"],"summary":"Delete Model Host","description":"Delete a pricing entry.","operationId":"delete_model_host_api_v1_admin_model_hosts__model_host_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_host_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Model Host Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/model-hosts/{model_host_id}/toggle-available":{"patch":{"tags":["Admin","Admin - Model Hosts"],"summary":"Toggle Model Host Available","description":"Toggle pricing entry availability status.","operationId":"toggle_model_host_available_api_v1_admin_model_hosts__model_host_id__toggle_available_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_host_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Model Host Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelHostDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/source-registry":{"get":{"tags":["Admin","Admin - Source Registry"],"summary":"List Sources","description":"List all source registry entries.","operationId":"list_sources_api_v1_admin_source_registry_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/SourceRegistryItem"},"type":"array","title":"Response List Sources Api V1 Admin Source Registry Get"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["Admin","Admin - Source Registry"],"summary":"Create Source","description":"Create a new source registry entry.","operationId":"create_source_api_v1_admin_source_registry_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceRegistryCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceRegistryItem"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/source-registry/{api_source}":{"get":{"tags":["Admin","Admin - Source Registry"],"summary":"Get Source","description":"Get a single source registry entry.","operationId":"get_source_api_v1_admin_source_registry__api_source__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_source","in":"path","required":true,"schema":{"type":"string","title":"Api Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceRegistryItem"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}},"patch":{"tags":["Admin","Admin - Source Registry"],"summary":"Update Source","description":"Update a source registry entry.","operationId":"update_source_api_v1_admin_source_registry__api_source__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_source","in":"path","required":true,"schema":{"type":"string","title":"Api Source"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceRegistryUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceRegistryItem"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}},"delete":{"tags":["Admin","Admin - Source Registry"],"summary":"Delete Source","description":"Delete a source registry entry.","operationId":"delete_source_api_v1_admin_source_registry__api_source__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_source","in":"path","required":true,"schema":{"type":"string","title":"Api Source"}}],"responses":{"204":{"description":"Successful Response"},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/source-registry/{api_source}/ping":{"post":{"tags":["Admin","Admin - Source Registry"],"summary":"Ping Source","description":"Ping an API source to check connectivity.","operationId":"ping_source_api_v1_admin_source_registry__api_source__ping_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_source","in":"path","required":true,"schema":{"type":"string","title":"Api Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PingResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/source-registry/{api_source}/fetch-preview":{"post":{"tags":["Admin","Admin - Source Registry"],"summary":"Fetch Preview Source","description":"Fetch a preview of data from an API source (no storage).","operationId":"fetch_preview_source_api_v1_admin_source_registry__api_source__fetch_preview_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_source","in":"path","required":true,"schema":{"type":"string","title":"Api Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FetchPreviewResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/source-registry/{api_source}/sync":{"post":{"tags":["Admin","Admin - Source Registry"],"summary":"Sync Source Endpoint","description":"Trigger a raw data sync, fetch from API into raw_snapshots.","operationId":"sync_source_endpoint_api_v1_admin_source_registry__api_source__sync_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_source","in":"path","required":true,"schema":{"type":"string","title":"Api Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/ingest/sources/{slug}":{"post":{"tags":["Admin","Admin - Ingest Pipeline"],"summary":"Ingest unprocessed raw_snapshots for a source","description":"Runs IngestService.ingest_source, processes all raw_snapshots from the source and either writes to model_source_versions or to ingestion_errors. Idempotent.","operationId":"ingest_source_api_v1_admin_ingest_sources__slug__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IngestSourceRequest"},{"type":"null"}],"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IngestSourceResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/ingest/errors":{"get":{"tags":["Admin","Admin - Ingest Pipeline"],"summary":"List ingestion errors","operationId":"list_errors_api_v1_admin_ingest_errors_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_source_slug","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by source","title":"Api Source Slug"},"description":"Filter by source"},{"name":"reason","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by reason","title":"Reason"},"description":"Filter by reason"},{"name":"only_unresolved","in":"query","required":false,"schema":{"type":"boolean","description":"Hide resolved errors","default":true,"title":"Only Unresolved"},"description":"Hide resolved errors"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IngestionErrorListResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/ingest/errors/stats":{"get":{"tags":["Admin","Admin - Ingest Pipeline"],"summary":"Aggregate stats over ingestion errors","description":"Counts grouped by reason and source. Unresolved only, resolved errors are\nhistorical and don't represent current work.","operationId":"error_stats_api_v1_admin_ingest_errors_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IngestionErrorStatsResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/ingest/errors/{error_id}/resolve":{"post":{"tags":["Admin","Admin - Ingest Pipeline"],"summary":"Manually mark an ingestion error as resolved","description":"Use for errors that won't be fixed automatically, admin reviewed and decided to dismiss.","operationId":"resolve_error_api_v1_admin_ingest_errors__error_id__resolve_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"error_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Error Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveErrorResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/ingest/errors/clear":{"post":{"tags":["Admin","Admin - Ingest Pipeline"],"summary":"Bulk-dismiss unresolved errors matching the given filters","description":"Marks every unresolved error matching the optional source/reason filters as resolved. Audit trail (resolved_by, resolved_at) is preserved; rows are not deleted. Pass no filters to clear everything unresolved.","operationId":"clear_errors_api_v1_admin_ingest_errors_clear_post","requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ClearErrorsRequest"},{"type":"null"}],"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClearErrorsResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/ingest/sources/{slug}/retry-errors":{"post":{"tags":["Admin","Admin - Ingest Pipeline"],"summary":"Re-run ingest after fixing config (e.g. added a prefix)","description":"Counts current unresolved errors for the source, runs IngestService.ingest_source, then counts remaining unresolved. Snapshots that now resolve get marked resolved automatically.","operationId":"retry_errors_api_v1_admin_ingest_sources__slug__retry_errors_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RetryErrorsResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/ingest/runs/latest":{"get":{"tags":["Admin","Admin - Ingest Pipeline"],"summary":"Latest ingestion run for a source (in-progress or finished)","description":"Returns the most recent IngestionRun row for the given source slug. Use this to poll progress during a long ingest, counters are updated every 10 snapshots while the run is in flight.","operationId":"get_latest_run_api_v1_admin_ingest_runs_latest_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_source_slug","in":"query","required":true,"schema":{"type":"string","description":"Source slug (e.g. 'litellm' or 'litellm')","title":"Api Source Slug"},"description":"Source slug (e.g. 'litellm' or 'litellm')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IngestionRunProgress"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/ingest/runs/{run_id}/cancel":{"post":{"tags":["Admin","Admin - Ingest Pipeline"],"summary":"Cancel an in-flight ingestion run","description":"Sets status='cancelled' on the run row. The IngestService loop checks this every 10 snapshots and exits cleanly without running the expensive materialize phase. No-op if the run already finished.","operationId":"cancel_run_api_v1_admin_ingest_runs__run_id__cancel_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelRunResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/docs":{"get":{"tags":["Admin","Admin - Docs","Admin - Docs"],"summary":"List Docs","description":"List available internal documentation files.","operationId":"list_docs_api_v1_admin_docs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/DocListItem"},"type":"array","title":"Response List Docs Api V1 Admin Docs Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/docs/{slug}":{"get":{"tags":["Admin","Admin - Docs","Admin - Docs"],"summary":"Get Doc","description":"Get a single documentation file by slug.","operationId":"get_doc_api_v1_admin_docs__slug__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocContent"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/wizard-config":{"get":{"tags":["Admin","Admin - Wizard Config"],"summary":"Get All Wizard Config","description":"Get all wizard configuration (industries, scales, priorities).","operationId":"get_all_wizard_config_api_v1_admin_wizard_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/wizard-config/{key}":{"get":{"tags":["Admin","Admin - Wizard Config"],"summary":"Get Wizard Config","description":"Get a specific wizard config key.","operationId":"get_wizard_config_api_v1_admin_wizard_config__key__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}},"put":{"tags":["Admin","Admin - Wizard Config"],"summary":"Update Wizard Config","description":"Update a wizard config key.\n\nKeys: industries, scales, priorities\nValue: JSON array matching the expected schema for that key.","operationId":"update_wizard_config_api_v1_admin_wizard_config__key__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateConfigRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/enrichment/descriptions/preview":{"post":{"tags":["Admin","Admin - Enrichment","Admin - Enrichment"],"summary":"Preview Descriptions","operationId":"preview_descriptions_api_v1_admin_enrichment_descriptions_preview_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnrichRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreviewResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/enrichment/descriptions/run":{"post":{"tags":["Admin","Admin - Enrichment","Admin - Enrichment"],"summary":"Run Descriptions","operationId":"run_descriptions_api_v1_admin_enrichment_descriptions_run_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnrichRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DescriptionRunResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/enrichment/{kind}/backfill":{"post":{"tags":["Admin","Admin - Enrichment","Admin - Enrichment"],"summary":"Start a background enrichment backfill (kind = descriptions | tags)","description":"Snapshots all candidate models for the kind and processes them in a detached task (each exactly once). Returns immediately with a run id; poll /enrichment/runs/latest?kind=<kind>.","operationId":"backfill_enrichment_api_v1_admin_enrichment__kind__backfill_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","title":"Kind"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BackfillRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnrichmentRunProgress"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/enrichment/runs/latest":{"get":{"tags":["Admin","Admin - Enrichment","Admin - Enrichment"],"summary":"Latest enrichment backfill run for a kind (progress polling)","operationId":"latest_enrichment_run_api_v1_admin_enrichment_runs_latest_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"kind","in":"query","required":false,"schema":{"type":"string","default":"descriptions","title":"Kind"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/EnrichmentRunProgress"},{"type":"null"}],"title":"Response Latest Enrichment Run Api V1 Admin Enrichment Runs Latest Get"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/enrichment/runs/{run_id}/cancel":{"post":{"tags":["Admin","Admin - Enrichment","Admin - Enrichment"],"summary":"Cancel a running enrichment backfill (the runner stops at the next batch)","operationId":"cancel_enrichment_run_api_v1_admin_enrichment_runs__run_id__cancel_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnrichmentRunProgress"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/enrichment/tags/preview":{"post":{"tags":["Admin","Admin - Enrichment","Admin - Enrichment"],"summary":"Preview Tags","operationId":"preview_tags_api_v1_admin_enrichment_tags_preview_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnrichRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreviewResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/enrichment/tags/run":{"post":{"tags":["Admin","Admin - Enrichment","Admin - Enrichment"],"summary":"Run Tags","operationId":"run_tags_api_v1_admin_enrichment_tags_run_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnrichRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagRunResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/inference/stats":{"get":{"tags":["Admin","Admin - Inference"],"summary":"Get Inference Stats","description":"Get aggregate inference statistics across all users.","operationId":"get_inference_stats_api_v1_admin_inference_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InferenceStatsResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/inference/logs":{"get":{"tags":["Admin","Admin - Inference"],"summary":"Get Inference Logs","description":"Get paginated inference usage logs across all users.","operationId":"get_inference_logs_api_v1_admin_inference_logs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"model","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageLogsAdminResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/inference/reload-registry":{"post":{"tags":["Admin","Admin - Inference"],"summary":"Reload Inference Registry","description":"Hot-reload the inference backend registry + scorer from the database.\n\nCall this after enabling/disabling inference on models or changing\nbackend URLs. Takes effect immediately without server restart. Most admin\nwrite paths (model PATCH, toggle, bulk actions) trigger this automatically;\nuse this endpoint for a manual force-refresh.","operationId":"reload_inference_registry_api_v1_admin_inference_reload_registry_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistryReloadResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/inference/backends":{"get":{"tags":["Admin","Admin - Inference"],"summary":"List Backend Health","description":"Latest probe outcome per registered vendor + active-route count.\n\nSource of truth for the Backends tab. Joins the latest row of\nbackend_health_checks per vendor with a count of currently-active\nroutes pointing at that vendor. The vendor list is anchored on\nVENDOR_PROBES so dormant BACKEND_FACTORIES entries (e.g. the vllm\nself-host backend kept around for experiments) don't surface in\nthe operations strip.","operationId":"list_backend_health_api_v1_admin_inference_backends_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BackendsHealthResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/inference/backends/{vendor}/probe":{"post":{"tags":["Admin","Admin - Inference"],"summary":"Probe Backend Now","description":"Trigger an on-demand probe of a single backend.\n\nWrites the result to backend_health_checks just like the scheduled\nloop, so the Backends tab refresh picks it up. Returns the live\noutcome so the caller can render immediate feedback.","operationId":"probe_backend_now_api_v1_admin_inference_backends__vendor__probe_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"vendor","in":"path","required":true,"schema":{"type":"string","title":"Vendor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProbeNowResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/inference/route-health":{"get":{"tags":["Admin","Admin - Inference"],"summary":"List Route Health","description":"Per-route health snapshot, joined with model display info.\n\nSorts unhealthy routes first (degraded → active with failures →\nhealthy) so the admin sees red rows at the top. Adds the model slug\nso admins can navigate to the model detail page from each row.","operationId":"list_route_health_api_v1_admin_inference_route_health_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"vendor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by vendor","title":"Vendor"},"description":"Filter by vendor"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by route status","title":"Status"},"description":"Filter by route status"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouteHealthResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/inference/fleet":{"get":{"tags":["Admin","Admin - Inference"],"summary":"List Inference Fleet","description":"Per-model platform availability for the Overview Model Fleet.\n\nFor every visible, inference-enabled Model: list each vendor and what's\nthe status of that (model, vendor) cell. The Overview's Fleet renders\none row per model with pill badges per vendor; clicking an \"available\"\npill triggers `GET /inference/route-suggestion/...` to prefill an\nadd-route form.","operationId":"list_inference_fleet_api_v1_admin_inference_fleet_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FleetResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/inference/route-suggestion/{model_id}/{vendor}":{"get":{"tags":["Admin","Admin - Inference"],"summary":"Get Route Suggestion","description":"Look up prefill data for adding a (model, vendor) route.\n\nReads the most recent vendor raw_snapshot whose source_model_id is one\nof this model's aliases, then extracts vendor-specific pricing into\ncents-per-1M-tokens. The Fleet's \"available\" pill click hits this to\npopulate the add-route modal.","operationId":"get_route_suggestion_api_v1_admin_inference_route_suggestion__model_id___vendor__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Model Id"}},{"name":"vendor","in":"path","required":true,"schema":{"type":"string","title":"Vendor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouteSuggestion"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/inference/platforms/{vendor}":{"get":{"tags":["Admin","Admin - Inference"],"summary":"Get Platform Detail","description":"Overview tab data source for /admin/inference/platforms/[vendor].\n\nReturns vendor metadata (from source_registry) + latest probe + a small\nhistory window so the Overview tab can show \"is this vendor up + what's\nits trend\".","operationId":"get_platform_detail_api_v1_admin_inference_platforms__vendor__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"vendor","in":"path","required":true,"schema":{"type":"string","title":"Vendor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformDetailResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/inference/platforms/{vendor}/usage":{"get":{"tags":["Admin","Admin - Inference"],"summary":"Get Platform Usage","description":"API Usage tab data source for /admin/inference/platforms/[vendor].\n\nSame aggregations as the global Stats endpoint but filtered to a single\nvendor (`backend` column on InferenceUsageLog matches the vendor key\nset by the chat completions path).","operationId":"get_platform_usage_api_v1_admin_inference_platforms__vendor__usage_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"vendor","in":"path","required":true,"schema":{"type":"string","title":"Vendor"}},{"name":"window_hours","in":"query","required":false,"schema":{"type":"integer","maximum":720,"minimum":1,"description":"Lookback window in hours (default 7 days)","default":168,"title":"Window Hours"},"description":"Lookback window in hours (default 7 days)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformUsageResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/inference/platforms/{vendor}/coverage":{"get":{"tags":["Admin","Admin - Inference"],"summary":"Get Platform Coverage","description":"List every model this vendor's catalog has data for, with route status.\n\nJoins the latest vendor raw_snapshot per source_model_id to the Model\ntable via aliases. The result powers a multi-select table where admins\npick rows and bulk-add them as routes via the POST endpoint below.","operationId":"get_platform_coverage_api_v1_admin_inference_platforms__vendor__coverage_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"vendor","in":"path","required":true,"schema":{"type":"string","title":"Vendor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoverageResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/inference/platforms/{vendor}/routes/bulk":{"post":{"tags":["Admin","Admin - Inference"],"summary":"Bulk Create Routes For Platform","description":"Create N routes for a single vendor in one call.\n\nEach route gets `priority = max(existing priority for that model) + 1`,\n`base_url` filled from the vendor probe config, and `status='active'`.\nPost-Phase E, the route alone makes a model inference-callable — the\nhas_active_route gate on Model is automatically derived.\n\nPer-route failures (duplicate target, missing model) are collected and\nreturned; the bulk operation never aborts on a single failure. The\ninference registry is reloaded once at the end so the new routes take\neffect immediately.","operationId":"bulk_create_routes_for_platform_api_v1_admin_inference_platforms__vendor__routes_bulk_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"vendor","in":"path","required":true,"schema":{"type":"string","title":"Vendor"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkRoutesRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkRoutesResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/inference/platforms/{vendor}/routes/auto-seed":{"post":{"tags":["Admin","Admin - Inference"],"summary":"Auto Seed Routes For Platform","description":"Auto-create model_routes for every model the vendor already serves.\n\nCross-references the vendor's raw_snapshots against our catalog:\nfor each snapshot whose source_model_id resolves (via model_aliases)\nto a Model, insert a model_routes row with pricing pulled from the\nraw payload (same helper bulk_create_routes uses). Skips models that\nalready have a route for this vendor.\n\nUseful right after wiring a new inference backend: the corresponding\nDeepInfra/Together ingest has already populated raw_snapshots + the\nidentity graph, so the route layer just needs to lift that knowledge\ninto model_routes.","operationId":"auto_seed_routes_for_platform_api_v1_admin_inference_platforms__vendor__routes_auto_seed_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"vendor","in":"path","required":true,"schema":{"type":"string","title":"Vendor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoSeedRoutesResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/users/{user_id}/inference-credits":{"post":{"tags":["Admin","Admin - Inference"],"summary":"Adjust Inference Credits","description":"Grant or deduct inference credits for a user.\n\nPositive amount_cents grants credits, negative deducts.\nCreates an audit trail via inference_credit_transactions.\nThe CHECK constraint on users.inference_credit_balance_cents\nprevents the balance from going negative.","operationId":"adjust_inference_credits_api_v1_admin_users__user_id__inference_credits_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditAdjustmentRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditAdjustmentResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/models/{model_id}/routes":{"get":{"tags":["Admin","Admin - Model Routes"],"summary":"List Model Routes","description":"List every route for a model, ordered by priority (lowest first).","operationId":"list_model_routes_api_v1_admin_models__model_id__routes_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Model Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ModelRouteResponse"},"title":"Response List Model Routes Api V1 Admin Models  Model Id  Routes Get"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}},"post":{"tags":["Admin","Admin - Model Routes"],"summary":"Create Model Route","description":"Add a new serving route for a model.\n\nPriority defaults to max(existing priority)+1 so new routes start as\nlowest-preferred fallbacks. Set priority=0 to make this the primary.","operationId":"create_model_route_api_v1_admin_models__model_id__routes_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Model Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelRouteCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelRouteResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/routes/{route_id}":{"patch":{"tags":["Admin","Admin - Model Routes"],"summary":"Update Model Route","description":"Update any subset of a route's fields. Reloads the registry on success.","operationId":"update_model_route_api_v1_admin_routes__route_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"route_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Route Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelRouteUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelRouteResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}},"delete":{"tags":["Admin","Admin - Model Routes"],"summary":"Delete Model Route","description":"Delete a route. Reloads the registry so the change is live immediately.","operationId":"delete_model_route_api_v1_admin_routes__route_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"route_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Route Id"}}],"responses":{"204":{"description":"Successful Response"},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/models/{model_id}/available-routes":{"get":{"tags":["Admin","Admin - Model Routes"],"summary":"List Available Routes","description":"For a given Model, list vendors whose recent raw_snapshots alias to it.\n\nJoins raw_snapshots → model_aliases → model_identities → models for the\ntarget model, filtered to snapshots seen in the last 14 days (same\npresence window the platform Coverage tab uses). Reuses the per-vendor\npricing extractor so the dropdown can pre-fill the form.","operationId":"list_available_routes_api_v1_admin_models__model_id__available_routes_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Model Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AvailableRouteCandidate"},"title":"Response List Available Routes Api V1 Admin Models  Model Id  Available Routes Get"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/routes/{route_id}/probe":{"post":{"tags":["Admin","Admin - Model Routes"],"summary":"Probe Model Route","description":"Send a 1-token completion request to the route and record the result.\n\nComplements the periodic catalog probe (which checks if the model is\nlisted by the vendor) by actually exercising the inference path. Admin\ncan trigger this on demand from the route detail page when they\nsuspect a route is broken without obvious catalog signal.","operationId":"probe_model_route_api_v1_admin_routes__route_id__probe_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"route_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Route Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActiveProbeResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/dedup/aggregator-only":{"get":{"tags":["Admin","Admin - Dedup","Admin - Dedup"],"summary":"List Unconfirmed","description":"Visible models with no creator-API source confirming they exist.\n\nCategories:\n  - orphan: zero source_versions\n  - host: only host-role sources (Together, DeepInfra, ...)\n  - aggregator: only AA / litellm aggregators\n  - synthetic: only description_generator, admin_override, etc.\n  - mixed_non_creator: combinations of the above\n\nThe IdentityResolver gate now blocks creator-less bootstraps going\nforward, this endpoint surfaces what was already there.\n\nURL kept as /aggregator-only for backward-compatibility with the\ninitial v1 release of the dedup page; the response shape is broader.","operationId":"list_unconfirmed_api_v1_admin_dedup_aggregator_only_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":2000,"minimum":1,"default":500,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnconfirmedListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/dedup/clusters":{"get":{"tags":["Admin","Admin - Dedup","Admin - Dedup"],"summary":"List Clusters","operationId":"list_clusters_api_v1_admin_dedup_clusters_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"heuristic","in":"query","required":false,"schema":{"type":"string","description":"Cluster discovery heuristic to apply","default":"same_creator_same_name","title":"Heuristic"},"description":"Cluster discovery heuristic to apply"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClustersListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/dedup/merge":{"post":{"tags":["Admin","Admin - Dedup","Admin - Dedup"],"summary":"Merge Cluster","operationId":"merge_cluster_api_v1_admin_dedup_merge_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__admin__dedup__MergeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__admin__dedup__MergeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/identities/{identity_id}/base":{"patch":{"tags":["Admin","Admin - Identities"],"summary":"Reassign Identity Base","description":"Move an identity to a different ModelBase, optionally correcting variant.\n\nRe-materializes both the old and new base so each catches up with\nthe new identity set. Routes attached to this identity follow\nautomatically — they FK to identity_id, not base_id.\n\nNOTE: route.base_id is denormalized post-#16; the column is kept in\nsync here for any consumers that still read it directly.","operationId":"reassign_identity_base_api_v1_admin_identities__identity_id__base_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"identity_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Identity Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReassignBaseRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdentityResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/identities/{identity_id}/variant":{"patch":{"tags":["Admin","Admin - Identities"],"summary":"Update Identity Variant","description":"Correct variant classification for an identity.\n\nCheap-and-targeted op for the inspector page when an admin spots a\nvendor identity that wasn't auto-detected (e.g., a new -SuperTurbo\nsuffix the parser doesn't know yet). Re-materializes the base so\nrole partitioning sees the right shape.","operationId":"update_identity_variant_api_v1_admin_identities__identity_id__variant_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"identity_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Identity Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateVariantRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdentityResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/identities/{identity_id}/link":{"post":{"tags":["Admin","Admin - Identities"],"summary":"Link Pending Identity","description":"Review-queue action: link a pending identity to an existing base.\n\nUsed when a vendor snapshot landed with REASON_NO_BASE_MODEL and\nthe admin has picked an existing base for it. Sets base_id +\nvariant fields, marks any matching ingestion_error rows resolved,\nre-materializes the base.","operationId":"link_pending_identity_api_v1_admin_identities__identity_id__link_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"identity_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Identity Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkPendingRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdentityResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/identities/{identity_id}/create-base":{"post":{"tags":["Admin","Admin - Identities"],"summary":"Create Base From Identity","description":"Review-queue action: create a new ModelBase from an identity.\n\nRare path — only when no existing base fits the snapshot. Admin\nsupplies the catalog spec via the request body; an auto-generated\nslug + display_name fill in if omitted.","operationId":"create_base_from_identity_api_v1_admin_identities__identity_id__create_base_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"identity_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Identity Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBaseFromIdentityRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdentityResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/identities/{identity_id}/deactivate":{"patch":{"tags":["Admin","Admin - Identities"],"summary":"Deactivate Identity","description":"Soft-delete an identity. Routes soft-cascade to status='disabled'.\n\nPer the design memo: soft cascade rather than hard delete so an\naccidental click is recoverable from the activity log. Disabled\nroutes accumulate but stay out of dispatch.","operationId":"deactivate_identity_api_v1_admin_identities__identity_id__deactivate_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"identity_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Identity Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeactivateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdentityResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/identities/{identity_id}":{"get":{"tags":["Admin","Admin - Identities"],"summary":"Get Identity","description":"Read one identity. Powers the inspector page's refresh after edits.","operationId":"get_identity_api_v1_admin_identities__identity_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"identity_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Identity Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdentityResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/models/{base_id}/identities":{"get":{"tags":["Admin","Admin - Identities"],"summary":"List Base Identities","description":"List every identity attached to a base. Powers the inspector page.","operationId":"list_base_identities_api_v1_admin_models__base_id__identities_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"base_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Base Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/IdentityResponse"},"title":"Response List Base Identities Api V1 Admin Models  Base Id  Identities Get"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/identities/{identity_id}/field-data":{"get":{"tags":["Admin","Admin - Identities"],"summary":"Get Identity Field Data","description":"Return the identity's raw field_data JSONB.\n\nUsed by the inspector page when an admin clicks 'expand field_data'\non an identity row. Kept off the listing payload because it can be\nlarge and is only useful in detail view.","operationId":"get_identity_field_data_api_v1_admin_identities__identity_id__field_data_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"identity_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Identity Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Identity Field Data Api V1 Admin Identities  Identity Id  Field Data Get"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/admin/merge-tool/preview":{"post":{"tags":["Admin","Admin - Merge Tool"],"summary":"Merge Preview","description":"Compute the diff a merge would produce. Read-only.\n\nThe collision detection is the heart of this endpoint — without it,\nhistorical cleanup-of-the-169 admin clicks would discover variant-\nunique-constraint conflicts mid-merge. Preview groups each\n(creator, model_key, variant_label, source) tuple appearing across\nthe cluster and flags any tuple that has > 1 identity row.","operationId":"merge_preview_api_v1_admin_merge_tool_preview_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__admin__merge_tool__MergeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MergePreviewResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/merge-tool/merge":{"post":{"tags":["Admin","Admin - Merge Tool"],"summary":"Merge Bases","description":"Run the merge. Repoints identities + routes from losers to survivor,\nhard-deletes loser bases (their URLs 404, no redirect), re-materializes\nthe survivor.\n\nDelegates to DedupService.merge — the well-tested path that already\nhandles route priority renumbering and re-materialization. The merge\ntool is a thin admin surface on top.","operationId":"merge_bases_api_v1_admin_merge_tool_merge_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__admin__merge_tool__MergeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__admin__merge_tool__MergeResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/merge-tool/candidates":{"get":{"tags":["Admin","Admin - Merge Tool"],"summary":"List Merge Candidates","description":"Surface mergeable base clusters via two heuristics.\n\n1. **Variant-suffix matches** — bases whose slugs differ only by a\n   known variant suffix from `variant_detector.VARIANT_SUFFIXES`\n   belong on the same canonical base (the suffix should live on\n   the vendor identity's variant_label, not in the catalog slug).\n   Example: `meta-llama-3-3-70b-instruct` + `meta-llama-3-3-70b-instruct-turbo`\n   → one cluster, base survives, turbo merges in.\n\n2. **Double-prefix slugs** — `<creator>-<creator>-…` slugs that\n   leaked from HF ingest when the org prefix wasn't stripped. The\n   de-prefixed form is the canonical row; the prefixed dupe merges in.\n\nReturns clusters sorted by member count descending so the admin\nsees the biggest cleanups first. Single-member clusters are\nexcluded (no merge to make).","operationId":"list_merge_candidates_api_v1_admin_merge_tool_candidates_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CandidatesResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/merge-tool/review-queue":{"get":{"tags":["Admin","Admin - Merge Tool"],"summary":"List Review Queue","description":"Pending vendor snapshots that hit REASON_NO_BASE_MODEL.\n\nThese are the snapshots a vendor source (Together, DeepInfra)\ncouldn't bootstrap because no creator-side base existed for the\nstripped slug. Admin's job is to link them to an existing base\n(most common), create a new base for them (rare), or dismiss them\n(junk model).\n\nThe auto-suggestion runs the same variant-detector strip as the\nresolver, then looks up `model_base WHERE creator=… AND slug ILIKE %stripped%`.\nBest-effort — a no-match doesn't mean there isn't a fit, just that\nthe admin needs to pick one by hand.","operationId":"list_review_queue_api_v1_admin_merge_tool_review_queue_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewQueueResponse"}}}},"401":{"description":"Not authenticated - Valid JWT token required"},"403":{"description":"Not authorized - Admin access required"},"404":{"description":"Resource not found"},"409":{"description":"Conflict - Resource already exists or constraint violation"},"422":{"description":"Validation error - Invalid request data"}}}},"/api/v1/uploads/logo":{"post":{"tags":["Uploads"],"summary":"Upload Logo","description":"Upload a logo image.\n\nReturns a URL that can be used in the `logo_url` field for creators, models, etc.\n\nSupported formats: PNG, JPEG, SVG, WebP, GIF\nMax size: 5MB","operationId":"upload_logo_api_v1_uploads_logo_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_logo_api_v1_uploads_logo_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/uploads/logo/{filename}":{"delete":{"tags":["Uploads"],"summary":"Delete Logo","description":"Delete an uploaded logo by filename.","operationId":"delete_logo_api_v1_uploads_logo__filename__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"filename","in":"path","required":true,"schema":{"type":"string","title":"Filename"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/uploads/creator/{creator_slug}/logo":{"post":{"tags":["Uploads"],"summary":"Upload Creator Logo","description":"Upload a logo and assign it to a creator in one step.\n\nThis endpoint:\n1. Validates the creator exists\n2. Uploads the logo file\n3. Updates the creator's logo_url in the database\n\nSupported formats: PNG, JPEG, SVG, WebP, GIF\nMax size: 5MB","operationId":"upload_creator_logo_api_v1_uploads_creator__creator_slug__logo_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"creator_slug","in":"path","required":true,"schema":{"type":"string","title":"Creator Slug"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_creator_logo_api_v1_uploads_creator__creator_slug__logo_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatorLogoResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Uploads"],"summary":"Delete Creator Logo","description":"Delete a creator's logo and clear their logo_url.","operationId":"delete_creator_logo_api_v1_uploads_creator__creator_slug__logo_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"creator_slug","in":"path","required":true,"schema":{"type":"string","title":"Creator Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/profile":{"get":{"tags":["Users"],"summary":"Get Profile","description":"Get current user's profile","operationId":"get_profile_api_v1_users_profile_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfile"}}}}},"security":[{"HTTPBearer":[]}]},"put":{"tags":["Users"],"summary":"Update Profile","description":"Update current user's profile","operationId":"update_profile_api_v1_users_profile_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfileUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/users/change-password":{"post":{"tags":["Users"],"summary":"Change Password","description":"Change user password (requires current password verification)","operationId":"change_password_api_v1_users_change_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordChangeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Change Password Api V1 Users Change Password Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/users/account":{"delete":{"tags":["Users"],"summary":"Delete Account","description":"Permanently delete user account (requires password verification)","operationId":"delete_account_api_v1_users_account_delete","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteAccountRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/users/onboarding/complete":{"post":{"tags":["Users"],"summary":"Complete Onboarding","description":"Complete the onboarding wizard","operationId":"complete_onboarding_api_v1_users_onboarding_complete_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingCompleteRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingCompleteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/users/favorites":{"get":{"tags":["Users"],"summary":"List Favorites","description":"List user's favorite models (paginated)","operationId":"list_favorites_api_v1_users_favorites_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FavoritesList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Users"],"summary":"Add Favorite","description":"Add a model to favorites","operationId":"add_favorite_api_v1_users_favorites_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddFavoriteRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FavoriteModel"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/favorites/{favorite_id}":{"delete":{"tags":["Users"],"summary":"Remove Favorite","description":"Remove a model from favorites","operationId":"remove_favorite_api_v1_users_favorites__favorite_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"favorite_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Favorite Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/favorites/check/{model_identity_id}":{"get":{"tags":["Users"],"summary":"Check Favorite","description":"Check if a model is in user's favorites","operationId":"check_favorite_api_v1_users_favorites_check__model_identity_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_identity_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Model Identity Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FavoriteCheckResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/comparisons":{"get":{"tags":["Users"],"summary":"List Saved Comparisons","description":"List user's saved comparisons (paginated)","operationId":"list_saved_comparisons_api_v1_users_comparisons_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedComparisonsList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Users"],"summary":"Create Saved Comparison","description":"Save a new model comparison","operationId":"create_saved_comparison_api_v1_users_comparisons_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSavedComparisonRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedComparison"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/comparisons/{comparison_id}":{"get":{"tags":["Users"],"summary":"Get Saved Comparison","description":"Get a specific saved comparison","operationId":"get_saved_comparison_api_v1_users_comparisons__comparison_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"comparison_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Comparison Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedComparison"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Users"],"summary":"Update Saved Comparison","description":"Update a saved comparison","operationId":"update_saved_comparison_api_v1_users_comparisons__comparison_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"comparison_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Comparison Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSavedComparisonRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedComparison"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Users"],"summary":"Delete Saved Comparison","description":"Delete a saved comparison","operationId":"delete_saved_comparison_api_v1_users_comparisons__comparison_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"comparison_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Comparison Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/limits":{"get":{"tags":["Users"],"summary":"Get User Limits","description":"Get current user's tier limits and usage counts","operationId":"get_user_limits_api_v1_users_limits_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserLimitsResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/users/entitlements":{"get":{"tags":["Users"],"summary":"Get Entitlements","description":"Get current user's tier entitlements (features + resources with usage)","operationId":"get_entitlements_api_v1_users_entitlements_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntitlementsResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/users/usage":{"get":{"tags":["Users"],"summary":"Get Usage Stats","description":"Get user usage statistics and recent activity","operationId":"get_usage_stats_api_v1_users_usage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageStats"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/leads":{"post":{"tags":["Leads"],"summary":"Submit Lead","description":"Submit a new lead (general purpose endpoint).\n\nThis is the main endpoint for capturing leads from various sources.","operationId":"submit_lead_api_v1_leads_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadCreateRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadSubmitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/leads/contact":{"post":{"tags":["Leads"],"summary":"Submit Contact Form","description":"Submit a contact form enquiry.\n\nSimplified endpoint specifically for the contact page.","operationId":"submit_contact_form_api_v1_leads_contact_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactFormRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadSubmitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/leads/demo":{"post":{"tags":["Leads"],"summary":"Submit Demo Request","description":"Submit a demo or enterprise request.\n\nFor users interested in enterprise features or wanting a demo.","operationId":"submit_demo_request_api_v1_leads_demo_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DemoRequestForm"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadSubmitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/leads/newsletter":{"post":{"tags":["Leads"],"summary":"Subscribe Newsletter","description":"Subscribe to the newsletter.\n\nCreates a lead entry with newsletter_subscribed=True.\nIf email already exists and is subscribed, returns success without duplicate.","operationId":"subscribe_newsletter_api_v1_leads_newsletter_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsletterSignupRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsletterResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/leads/newsletter/unsubscribe":{"post":{"tags":["Leads"],"summary":"Unsubscribe Newsletter","description":"Unsubscribe from the newsletter.","operationId":"unsubscribe_newsletter_api_v1_leads_newsletter_unsubscribe_post","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","description":"Signed unsubscribe token","title":"Token"},"description":"Signed unsubscribe token"},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Email address (optional if token provided)","title":"Email"},"description":"Email address (optional if token provided)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsletterResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/leads/limit-reset":{"post":{"tags":["Leads"],"summary":"Submit Limit Reset","description":"Submit a beta limit reset request (authenticated users only).\n\nAuto-fills contact info from user profile. Deduplicates by checking for\nan existing NEW + LIMIT_RESET lead with the same email.","operationId":"submit_limit_reset_api_v1_leads_limit_reset_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LimitResetRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadSubmitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/leads/admin/list":{"get":{"tags":["Leads"],"summary":"List Leads","description":"List all leads with filtering and pagination (admin only).","operationId":"list_leads_api_v1_leads_admin_list_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/LeadStatusEnum"},{"type":"null"}],"description":"Filter by status","title":"Status"},"description":"Filter by status"},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/LeadSourceEnum"},{"type":"null"}],"description":"Filter by source","title":"Source"},"description":"Filter by source"},{"name":"lead_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/LeadTypeEnum"},{"type":"null"}],"description":"Filter by type","title":"Lead Type"},"description":"Filter by type"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search email or name","title":"Search"},"description":"Search email or name"},{"name":"newsletter_only","in":"query","required":false,"schema":{"type":"boolean","description":"Only show newsletter subscribers","default":false,"title":"Newsletter Only"},"description":"Only show newsletter subscribers"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/leads/admin/stats":{"get":{"tags":["Leads"],"summary":"Get Lead Stats","description":"Get lead statistics for admin dashboard.","operationId":"get_lead_stats_api_v1_leads_admin_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadStatsResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/leads/admin/{lead_id}":{"get":{"tags":["Leads"],"summary":"Get Lead","description":"Get a single lead by ID (admin only).","operationId":"get_lead_api_v1_leads_admin__lead_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","title":"Lead Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Leads"],"summary":"Update Lead","description":"Update a lead (admin only).\n\nUsed to change status, add notes, etc.","operationId":"update_lead_api_v1_leads_admin__lead_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","title":"Lead Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Leads"],"summary":"Delete Lead","description":"Delete a lead (admin only).","operationId":"delete_lead_api_v1_leads_admin__lead_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","title":"Lead Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/leads/admin/bulk":{"post":{"tags":["Leads"],"summary":"Bulk Lead Action","description":"Perform bulk operations on leads (admin only).\n\nSupported actions: delete, mark_contacted, mark_qualified, mark_converted, mark_closed","operationId":"bulk_lead_action_api_v1_leads_admin_bulk_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkLeadActionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkLeadActionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/leads/admin/bulk/all":{"delete":{"tags":["Leads"],"summary":"Delete All Leads","description":"Delete all leads (admin only).\n\nWARNING: This is a destructive operation that cannot be undone.","operationId":"delete_all_leads_api_v1_leads_admin_bulk_all_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/leads/admin/bulk/by-status/{lead_status}":{"delete":{"tags":["Leads"],"summary":"Delete Leads By Status","description":"Delete all leads with a specific status (admin only).\n\nWARNING: This is a destructive operation that cannot be undone.","operationId":"delete_leads_by_status_api_v1_leads_admin_bulk_by_status__lead_status__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"lead_status","in":"path","required":true,"schema":{"type":"string","title":"Lead Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/leads/admin/bulk/by-source/{lead_source}":{"delete":{"tags":["Leads"],"summary":"Delete Leads By Source","description":"Delete all leads from a specific source (admin only).\n\nWARNING: This is a destructive operation that cannot be undone.","operationId":"delete_leads_by_source_api_v1_leads_admin_bulk_by_source__lead_source__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"lead_source","in":"path","required":true,"schema":{"type":"string","title":"Lead Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/inference/conversations":{"post":{"tags":["Inference","Conversations"],"summary":"Create Conversation","operationId":"create_conversation_api_v1_inference_conversations_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateConversationRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Inference","Conversations"],"summary":"List Conversations","operationId":"list_conversations_api_v1_inference_conversations_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"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":{"$ref":"#/components/schemas/ConversationListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/inference/conversations/{conversation_id}":{"get":{"tags":["Inference","Conversations"],"summary":"Get Conversation","operationId":"get_conversation_api_v1_inference_conversations__conversation_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Inference","Conversations"],"summary":"Update Conversation","operationId":"update_conversation_api_v1_inference_conversations__conversation_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateConversationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Inference","Conversations"],"summary":"Delete Conversation","operationId":"delete_conversation_api_v1_inference_conversations__conversation_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/inference/conversations/{conversation_id}/messages":{"post":{"tags":["Inference","Conversations"],"summary":"Append Messages","operationId":"append_messages_api_v1_inference_conversations__conversation_id__messages_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppendMessagesRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppendMessagesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/inference/chat/completions":{"post":{"tags":["Inference"],"summary":"Chat Completions","description":"OpenAI-compatible chat completions, served by the routing engine.\n\n`model: \"auto\"` runs the full engine (classify -> eligibility -> score -> chain);\na specific id pins to that model's routes; `routing.model_pool` is a per-request\ncustom pool. Every request writes an M1 routing_decisions audit row (F8).","operationId":"chat_completions_api_v1_inference_chat_completions_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatCompletionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/inference/classify":{"post":{"tags":["Inference"],"summary":"Classify Prompt","description":"Preview how the engine classifies a prompt and where it would route.\n\nNo auth, no credits, no inference: runs the E1 classifier + a routing dry-run\nover the Auto pool (no model is actually called). Rate limited per-IP.","operationId":"classify_prompt_api_v1_inference_classify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClassifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Classify Prompt Api V1 Inference Classify Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/inference/models":{"get":{"tags":["Inference"],"summary":"List Inference Models","description":"List models available for inference with use case tags.\n\nFilter matches the registry's selection rule post-Phase E: model is_active\nAND has at least one active route. Listing here without an active route\nwould surface but 404 from chat/completions.\n\nCached for REDIS_CACHE_TTL; invalidation rides on the broad `models:*`\npattern hit by every admin write that could affect inference.","operationId":"list_inference_models_api_v1_inference_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Inference Models Api V1 Inference Models Get"}}}}}}},"/api/v1/inference/catalog":{"get":{"tags":["Inference"],"summary":"List Inference Catalog","description":"Inference catalog with aggregate third-party pricing.\n\nSame shape as /api/v1/models but auth-gated and includes the aggregate\n`input_cost_per_1m` / `output_cost_per_1m` fields the playground uses\nto compute its \"savings vs priciest provider\" ribbon. Public callers\nshould hit /api/v1/models, which no longer exposes third-party pricing.\n\nPricing is loaded directly from `model_pricing` (creator-direct cheapest,\nelse absolute cheapest) at response time rather than reading the Model\ncolumns. This keeps the catalog truthful even after the Model display-price\ncolumns are dropped.","operationId":"list_inference_catalog_api_v1_inference_catalog_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InferenceCatalogResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/inference/models/{model_id}/health":{"get":{"tags":["Inference"],"summary":"Model Health","description":"Check if a model's backend is warm and ready.","operationId":"model_health_api_v1_inference_models__model_id__health_get","parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"}}],"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"}}}}}}},"/api/v1/inference/keys":{"get":{"tags":["Inference"],"summary":"List Api Keys","description":"List all inference API keys for the authenticated user.","operationId":"list_api_keys_api_v1_inference_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ApiKeyResponse"},"type":"array","title":"Response List Api Keys Api V1 Inference Keys Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["Inference"],"summary":"Create Api Key","description":"Create a new inference API key. Maximum 10 active keys per user.","operationId":"create_api_key_api_v1_inference_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateApiKeyRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateApiKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/inference/keys/{key_id}":{"patch":{"tags":["Inference"],"summary":"Update Api Key","description":"Update an API key's name, model pool, optimization mode, or eligibility preset.","operationId":"update_api_key_api_v1_inference_keys__key_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Key Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateApiKeyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Inference"],"summary":"Revoke Api Key","description":"Revoke an inference API key (soft delete).","operationId":"revoke_api_key_api_v1_inference_keys__key_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Key Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/inference/credits":{"get":{"tags":["Inference"],"summary":"Get Credit Balance","description":"Get inference credit balance.","operationId":"get_credit_balance_api_v1_inference_credits_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditBalanceResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/inference/credits/transactions":{"get":{"tags":["Inference"],"summary":"List Credit Transactions","description":"List inference credit transactions.","operationId":"list_credit_transactions_api_v1_inference_credits_transactions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CreditTransactionResponse"},"title":"Response List Credit Transactions Api V1 Inference Credits Transactions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/inference/usage":{"get":{"tags":["Inference"],"summary":"List Usage Logs","description":"List inference usage logs.","operationId":"list_usage_logs_api_v1_inference_usage_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UsageLogResponse"},"title":"Response List Usage Logs Api V1 Inference Usage Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/inference/usage/{log_id}/feedback":{"post":{"tags":["Inference"],"summary":"Submit Feedback","description":"Attach a thumbs-up/down rating to an inference request.\n\nThe signal is the strongest available ground truth for routing quality -\na thumbs-down on an auto-routed response is direct evidence the router\npicked the wrong model for that prompt.","operationId":"submit_feedback_api_v1_inference_usage__log_id__feedback_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Log Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/inference/routing-decisions/{request_id}":{"get":{"tags":["Router"],"summary":"Get Routing Decision","description":"Fetch one routing decision by request id (D15). Scoped to the caller.","operationId":"get_routing_decision_api_v1_inference_routing_decisions__request_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoutingDecisionView"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/shadow/baseline-models":{"get":{"tags":["Shadow Replay"],"summary":"List Baseline Models","description":"Catalog models a customer can pick as their current model: any base we have\na price + benchmark for (includes frontier models we don't serve), priciest\nfirst.","operationId":"list_baseline_models_api_v1_shadow_baseline_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ShadowBaselineModelView"},"type":"array","title":"Response List Baseline Models Api V1 Shadow Baseline Models Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/shadow/model-requests":{"post":{"tags":["Shadow Replay"],"summary":"Request Model","description":"Capture a 'my model isn't in the catalog' request as a feature-request lead.\n\nThe user is authenticated, so we record their email for follow-up. Reuses the\nleads table (no new schema): source=other, type=feature_request.","operationId":"request_model_api_v1_shadow_model_requests_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelRequestCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Request Model Api V1 Shadow Model Requests Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/shadow/uploads":{"get":{"tags":["Shadow Replay"],"summary":"List Batches","description":"List the caller's shadow-replay batches, newest first.","operationId":"list_batches_api_v1_shadow_uploads_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ShadowBatchSummaryView"},"type":"array","title":"Response List Batches Api V1 Shadow Uploads Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["Shadow Replay"],"summary":"Upload Batch","description":"Accept a batch of prompts, persist it, and start background processing.","operationId":"upload_batch_api_v1_shadow_uploads_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShadowUploadRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShadowBatchSummaryView"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/shadow/uploads/{batch_id}":{"get":{"tags":["Shadow Replay"],"summary":"Get Batch","description":"Fetch one batch (status + report), scoped to the caller.\n\nThe report `summary` stores only model ids per sample (no prompt text); the\nper-prompt table needs the prompt to show, so a truncated preview is joined\nfrom the still-live samples here (null once the 30-day purge removes them).","operationId":"get_batch_api_v1_shadow_uploads__batch_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"batch_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Batch Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShadowBatchDetailView"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Shadow Replay"],"summary":"Delete Batch","description":"Delete one of the caller's batches and its captured samples.","operationId":"delete_batch_api_v1_shadow_uploads__batch_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"batch_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Batch Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AIModelDetail":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"model_identity_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Model Identity Id"},"slug":{"type":"string","title":"Slug"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"creator":{"type":"string","title":"Creator"},"model_key":{"type":"string","title":"Model Key"},"model_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Type"},"param_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Param Count"},"context_window":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Context Window"},"max_output_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Output Tokens"},"input_modalities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Input Modalities"},"output_modalities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Output Modalities"},"capabilities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Capabilities"},"strengths":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Strengths"},"use_case_tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Use Case Tags"},"license":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"License"},"release_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Release Date"},"training_data_cutoff":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Training Data Cutoff"},"deployment_options":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Deployment Options"},"documentation_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Documentation Url"},"benchmark_scores":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Benchmark Scores"},"is_featured":{"type":"boolean","title":"Is Featured","default":false},"is_visible":{"type":"boolean","title":"Is Visible","default":true},"is_open_source":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Open Source"},"inference_available":{"type":"boolean","title":"Inference Available","default":false},"inference_model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inference Model Id"},"resolved_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Resolved At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"like_count":{"type":"integer","title":"Like Count","default":0},"param_count_display":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Param Count Display","description":"Compute display string from param_count (e.g., 70B from 70000000000)","readOnly":true},"parameters":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parameters","description":"Alias for param_count_display (e.g., '175B')","readOnly":true},"provider":{"$ref":"#/components/schemas/ProviderResponse","description":"Generate provider object from creator with creator info.","readOnly":true},"is_active":{"type":"boolean","title":"Is Active","description":"Alias for is_visible","readOnly":true}},"type":"object","required":["id","slug","creator","model_key","created_at","updated_at","param_count_display","parameters","provider","is_active"],"title":"AIModelDetail","description":"Full AI model schema for detail view"},"AIModelListItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"model_identity_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Model Identity Id"},"slug":{"type":"string","title":"Slug"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"creator":{"type":"string","title":"Creator"},"model_key":{"type":"string","title":"Model Key"},"model_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Type"},"param_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Param Count"},"context_window":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Context Window"},"max_output_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Output Tokens"},"input_modalities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Input Modalities"},"output_modalities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Output Modalities"},"capabilities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Capabilities"},"license":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"License"},"is_featured":{"type":"boolean","title":"Is Featured","default":false},"is_visible":{"type":"boolean","title":"Is Visible","default":true},"is_open_source":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Open Source"},"inference_available":{"type":"boolean","title":"Inference Available","default":false},"inference_model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inference Model Id"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"like_count":{"type":"integer","title":"Like Count","default":0},"param_count_display":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Param Count Display","description":"Compute display string from param_count (e.g., 70B from 70000000000)","readOnly":true},"parameters":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parameters","description":"Alias for param_count_display (e.g., '175B')","readOnly":true},"provider":{"$ref":"#/components/schemas/ProviderResponse","description":"Generate provider object from creator with creator info.","readOnly":true}},"type":"object","required":["id","slug","creator","model_key","param_count_display","parameters","provider"],"title":"AIModelListItem","description":"Simplified AI model schema for list view"},"AIModelListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AIModelListItem"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"total_pages":{"type":"integer","title":"Total Pages"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"},"has_next":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Next"}},"type":"object","required":["items","total","page","page_size","total_pages"],"title":"AIModelListResponse","description":"Paginated list of AI models"},"ActiveProbeResponse":{"properties":{"route_id":{"type":"string","format":"uuid","title":"Route Id"},"vendor":{"type":"string","title":"Vendor"},"upstream_model_id":{"type":"string","title":"Upstream Model Id"},"ok":{"type":"boolean","title":"Ok"},"status_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Status Code"},"latency_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Latency Ms"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"completion_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Completion Tokens"},"new_status":{"type":"string","title":"New Status"}},"type":"object","required":["route_id","vendor","upstream_model_id","ok","status_code","latency_ms","error_message","completion_tokens","new_status"],"title":"ActiveProbeResponse","description":"One active probe outcome plus the route's new status post-update."},"ActivityLogItem":{"properties":{"id":{"type":"integer","title":"Id"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"},"user_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Email"},"action":{"type":"string","title":"Action"},"resource_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resource Type"},"resource_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Resource Id"},"extra_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Extra Data"},"ip_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ip Address"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","action","created_at"],"title":"ActivityLogItem","description":"Activity log entry for admin view."},"AddFavoriteRequest":{"properties":{"model_identity_id":{"type":"string","format":"uuid","title":"Model Identity Id"},"notes":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Notes"}},"additionalProperties":false,"type":"object","required":["model_identity_id"],"title":"AddFavoriteRequest","description":"Schema for adding a model to favorites"},"AdminPasswordResetRequest":{"properties":{"new_password":{"type":"string","maxLength":128,"minLength":8,"title":"New Password"}},"additionalProperties":false,"type":"object","required":["new_password"],"title":"AdminPasswordResetRequest","description":"Schema for admin password reset (sets new password directly)"},"ApiKeyResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"key_prefix":{"type":"string","title":"Key Prefix"},"name":{"type":"string","title":"Name"},"model_pool":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Model Pool"},"optimize_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Optimize Mode"},"preset":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preset"},"is_active":{"type":"boolean","title":"Is Active"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","key_prefix","name","is_active","last_used_at","created_at"],"title":"ApiKeyResponse"},"AppendMessagesRequest":{"properties":{"messages":{"items":{"$ref":"#/components/schemas/MessageIn"},"type":"array","maxItems":50,"title":"Messages"}},"type":"object","required":["messages"],"title":"AppendMessagesRequest"},"AppendMessagesResponse":{"properties":{"message_count":{"type":"integer","title":"Message Count"}},"type":"object","required":["message_count"],"title":"AppendMessagesResponse"},"AutoSeedRoutesResponse":{"properties":{"vendor":{"type":"string","title":"Vendor"},"candidates_considered":{"type":"integer","title":"Candidates Considered"},"created":{"type":"integer","title":"Created"},"skipped_existing":{"type":"integer","title":"Skipped Existing"},"failures":{"items":{"$ref":"#/components/schemas/BulkRouteFailure"},"type":"array","title":"Failures"}},"type":"object","required":["vendor","candidates_considered","created","skipped_existing","failures"],"title":"AutoSeedRoutesResponse"},"AvailableRouteCandidate":{"properties":{"vendor":{"type":"string","title":"Vendor"},"upstream_model_id":{"type":"string","title":"Upstream Model Id"},"base_url":{"type":"string","title":"Base Url"},"input_cost_per_1m":{"type":"number","title":"Input Cost Per 1M"},"output_cost_per_1m":{"type":"number","title":"Output Cost Per 1M"},"routed":{"type":"boolean","title":"Routed"}},"type":"object","required":["vendor","upstream_model_id","base_url","input_cost_per_1m","output_cost_per_1m","routed"],"title":"AvailableRouteCandidate","description":"One vendor that lists this model in its recent catalog.\n\nUsed by the Add Route form on the model detail page to populate a\nvendor dropdown with pre-filled upstream_id / base_url / pricing\ninstead of asking the admin to type those by hand."},"BackendHealthItem":{"properties":{"vendor":{"type":"string","title":"Vendor"},"configured":{"type":"boolean","title":"Configured"},"last_check_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Check At"},"last_ok":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Last Ok"},"last_status_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Status Code"},"last_latency_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Latency Ms"},"last_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Error"},"active_routes":{"type":"integer","title":"Active Routes"}},"type":"object","required":["vendor","configured","last_check_at","last_ok","last_status_code","last_latency_ms","last_error","active_routes"],"title":"BackendHealthItem","description":"Per-vendor health snapshot for the Backends admin tab."},"BackendsHealthResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/BackendHealthItem"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"BackendsHealthResponse"},"BackfillRequest":{"properties":{"creators":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Creators","description":"Restrict the backfill to these creator slugs (empty/None = all creators)"},"regenerate":{"type":"boolean","title":"Regenerate","description":"Also re-do existing ai_generated / legacy descriptions","default":false}},"type":"object","title":"BackfillRequest"},"BatchingAnalysis":{"properties":{"max_batch_size":{"type":"integer","title":"Max Batch Size"},"effective_batch_size":{"type":"integer","title":"Effective Batch Size"},"kv_cache_headroom_gb":{"type":"number","title":"Kv Cache Headroom Gb"},"batching_efficiency":{"type":"number","title":"Batching Efficiency"}},"type":"object","required":["max_batch_size","effective_batch_size","kv_cache_headroom_gb","batching_efficiency"],"title":"BatchingAnalysis"},"Benchmark":{"properties":{"slug":{"type":"string","title":"Slug"},"name":{"type":"string","title":"Name"},"category":{"type":"string","title":"Category"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"higher_is_better":{"type":"boolean","title":"Higher Is Better","default":true},"max_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Score"},"is_primary":{"type":"boolean","title":"Is Primary","default":false}},"type":"object","required":["slug","name","category"],"title":"Benchmark","description":"Benchmark definition."},"BenchmarkCategoriesResponse":{"properties":{"categories":{"items":{"$ref":"#/components/schemas/CategoryWithBenchmarks"},"type":"array","title":"Categories"}},"type":"object","required":["categories"],"title":"BenchmarkCategoriesResponse","description":"Response with benchmarks grouped by category."},"BenchmarkCategoryMetadata":{"properties":{"slug":{"type":"string","title":"Slug"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"color":{"type":"string","title":"Color"},"order":{"type":"integer","title":"Order"}},"type":"object","required":["slug","name","description","color","order"],"title":"BenchmarkCategoryMetadata","description":"Metadata for a benchmark category."},"BenchmarkListResponse":{"properties":{"benchmarks":{"items":{"$ref":"#/components/schemas/Benchmark"},"type":"array","title":"Benchmarks"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["benchmarks","total"],"title":"BenchmarkListResponse","description":"Response containing list of benchmarks."},"BenchmarkRow":{"properties":{"slug":{"type":"string","title":"Slug","description":"Benchmark identifier"},"name":{"type":"string","title":"Name","description":"Benchmark display name"},"category":{"type":"string","title":"Category","description":"Category: 'reasoning', 'coding', 'math'"},"higher_is_better":{"type":"boolean","title":"Higher Is Better","description":"Score direction","default":true},"scores":{"items":{"$ref":"#/components/schemas/BenchmarkScore"},"type":"array","title":"Scores","description":"Scores ordered by rank"}},"type":"object","required":["slug","name","category","scores"],"title":"BenchmarkRow","description":"A single benchmark with scores from all compared models"},"BenchmarkScore":{"properties":{"model_slug":{"type":"string","title":"Model Slug"},"model_name":{"type":"string","title":"Model Name"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score","description":"Benchmark score (null if not available)"},"rank":{"type":"integer","title":"Rank","description":"Rank among compared models (1 = best)"}},"type":"object","required":["model_slug","model_name","rank"],"title":"BenchmarkScore","description":"A model's score on a single benchmark"},"BenchmarkScoreSimple":{"properties":{"benchmark_slug":{"type":"string","title":"Benchmark Slug"},"benchmark_name":{"type":"string","title":"Benchmark Name"},"category":{"type":"string","title":"Category"},"score":{"type":"number","title":"Score"},"score_type":{"type":"string","title":"Score Type"},"higher_is_better":{"type":"boolean","title":"Higher Is Better"},"max_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Score"},"percentile":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Percentile"},"rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rank"},"source":{"type":"string","title":"Source"}},"type":"object","required":["benchmark_slug","benchmark_name","category","score","score_type","higher_is_better","source"],"title":"BenchmarkScoreSimple","description":"A single benchmark score for a model."},"BenchmarkSection":{"properties":{"by_category":{"additionalProperties":{"items":{"$ref":"#/components/schemas/BenchmarkRow"},"type":"array"},"type":"object","title":"By Category","description":"Category slug -> list of benchmarks"}},"type":"object","required":["by_category"],"title":"BenchmarkSection","description":"All benchmark data grouped by category"},"Body_import_gpus_api_v1_admin_gpus_import_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_import_gpus_api_v1_admin_gpus_import_post"},"Body_preview_gpu_import_api_v1_admin_gpus_preview_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_preview_gpu_import_api_v1_admin_gpus_preview_post"},"Body_upload_creator_logo_api_v1_uploads_creator__creator_slug__logo_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File","description":"Logo image file (PNG, JPEG, SVG, WebP, GIF)"}},"type":"object","required":["file"],"title":"Body_upload_creator_logo_api_v1_uploads_creator__creator_slug__logo_post"},"Body_upload_logo_api_v1_uploads_logo_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File","description":"Logo image file (PNG, JPEG, SVG, WebP, GIF)"}},"type":"object","required":["file"],"title":"Body_upload_logo_api_v1_uploads_logo_post"},"BulkActionRequest":{"properties":{"ids":{"items":{"type":"string","format":"uuid"},"type":"array","minItems":1,"title":"Ids","description":"List of entity IDs"},"action":{"type":"string","title":"Action","description":"Action: feature, unfeature, or delete"}},"type":"object","required":["ids","action"],"title":"BulkActionRequest","description":"Request schema for bulk operations."},"BulkActionResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"affected_count":{"type":"integer","title":"Affected Count"},"message":{"type":"string","title":"Message"}},"type":"object","required":["success","affected_count","message"],"title":"BulkActionResponse","description":"Response schema for bulk operations."},"BulkDeleteResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"},"deleted_count":{"type":"integer","title":"Deleted Count"}},"type":"object","required":["success","message","deleted_count"],"title":"BulkDeleteResponse","description":"Response for bulk delete operations."},"BulkLeadActionRequest":{"properties":{"ids":{"items":{"type":"string"},"type":"array","maxItems":5000,"title":"Ids"},"action":{"type":"string","enum":["delete","mark_contacted","mark_qualified","mark_converted","mark_closed"],"title":"Action"}},"type":"object","required":["ids","action"],"title":"BulkLeadActionRequest","description":"Request for bulk lead operations."},"BulkLeadActionResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"affected_count":{"type":"integer","title":"Affected Count"},"message":{"type":"string","title":"Message"}},"type":"object","required":["success","affected_count","message"],"title":"BulkLeadActionResponse","description":"Response for bulk lead operations."},"BulkRouteFailure":{"properties":{"model_id":{"type":"string","format":"uuid","title":"Model Id"},"upstream_model_id":{"type":"string","title":"Upstream Model Id"},"error":{"type":"string","title":"Error"}},"type":"object","required":["model_id","upstream_model_id","error"],"title":"BulkRouteFailure"},"BulkRouteSpec":{"properties":{"model_id":{"type":"string","format":"uuid","title":"Model Id"},"upstream_model_id":{"type":"string","title":"Upstream Model Id"},"input_cost_per_1m":{"type":"number","minimum":0.0,"title":"Input Cost Per 1M","description":"Dollars per 1M input tokens"},"output_cost_per_1m":{"type":"number","minimum":0.0,"title":"Output Cost Per 1M","description":"Dollars per 1M output tokens"}},"type":"object","required":["model_id","upstream_model_id","input_cost_per_1m","output_cost_per_1m"],"title":"BulkRouteSpec"},"BulkRoutesRequest":{"properties":{"routes":{"items":{"$ref":"#/components/schemas/BulkRouteSpec"},"type":"array","maxItems":200,"minItems":1,"title":"Routes"}},"type":"object","required":["routes"],"title":"BulkRoutesRequest"},"BulkRoutesResponse":{"properties":{"vendor":{"type":"string","title":"Vendor"},"created":{"type":"integer","title":"Created"},"failures":{"items":{"$ref":"#/components/schemas/BulkRouteFailure"},"type":"array","title":"Failures"}},"type":"object","required":["vendor","created","failures"],"title":"BulkRoutesResponse"},"CancelRunResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"status":{"type":"string","title":"Status"},"cancelled":{"type":"boolean","title":"Cancelled"}},"type":"object","required":["id","status","cancelled"],"title":"CancelRunResponse"},"CandidateCluster":{"properties":{"reason":{"type":"string","title":"Reason"},"cluster_key":{"type":"string","title":"Cluster Key"},"members":{"items":{"$ref":"#/components/schemas/CandidateMember"},"type":"array","title":"Members"},"default_winner_id":{"type":"string","format":"uuid","title":"Default Winner Id"}},"type":"object","required":["reason","cluster_key","members","default_winner_id"],"title":"CandidateCluster","description":"A group of bases the admin should consider merging.\n\n`default_winner_id` is the heuristic-chosen survivor (highest\nidentities count, ties broken by has-creator-source then by slug).\nAdmin can override on the merge-candidates page."},"CandidateMember":{"properties":{"base_id":{"type":"string","format":"uuid","title":"Base Id"},"slug":{"type":"string","title":"Slug"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"creator":{"type":"string","title":"Creator"},"identities_count":{"type":"integer","title":"Identities Count"},"routes_count":{"type":"integer","title":"Routes Count"},"is_visible":{"type":"boolean","title":"Is Visible"}},"type":"object","required":["base_id","slug","display_name","creator","identities_count","routes_count","is_visible"],"title":"CandidateMember","description":"One base inside a candidate cluster."},"CandidatesResponse":{"properties":{"clusters":{"items":{"$ref":"#/components/schemas/CandidateCluster"},"type":"array","title":"Clusters"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["clusters","total"],"title":"CandidatesResponse"},"CapabilityMetadata":{"properties":{"slug":{"type":"string","title":"Slug"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"aliases":{"items":{"type":"string"},"type":"array","title":"Aliases","default":[]}},"type":"object","required":["slug","name","description"],"title":"CapabilityMetadata","description":"Metadata for a single capability."},"CapabilityRow":{"properties":{"slug":{"type":"string","title":"Slug","description":"Capability identifier"},"name":{"type":"string","title":"Name","description":"Display name"},"support":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Support","description":"Model slug -> supported"}},"type":"object","required":["slug","name","support"],"title":"CapabilityRow","description":"Support status for one capability across all models"},"CapacityInsights":{"properties":{"context_window":{"$ref":"#/components/schemas/Ranking","description":"Context window ranking"},"max_output":{"$ref":"#/components/schemas/Ranking","description":"Max output tokens ranking"}},"type":"object","required":["context_window","max_output"],"title":"CapacityInsights","description":"Context and output capacity rankings"},"CategoryWithBenchmarks":{"properties":{"slug":{"type":"string","title":"Slug"},"name":{"type":"string","title":"Name"},"benchmarks":{"items":{"$ref":"#/components/schemas/Benchmark"},"type":"array","title":"Benchmarks"}},"type":"object","required":["slug","name","benchmarks"],"title":"CategoryWithBenchmarks","description":"A category with its benchmarks."},"ChatCompletionRequest":{"properties":{"model":{"type":"string","title":"Model","description":"Model ID or 'auto' for smart routing"},"messages":{"items":{"$ref":"#/components/schemas/ChatMessage"},"type":"array","maxItems":200,"minItems":1,"title":"Messages"},"temperature":{"type":"number","maximum":2.0,"minimum":0.0,"title":"Temperature","default":1.0},"top_p":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Top P","default":1.0},"max_tokens":{"anyOf":[{"type":"integer","maximum":128000.0,"exclusiveMinimum":0.0},{"type":"null"}],"title":"Max Tokens"},"stream":{"type":"boolean","title":"Stream","default":false},"stop":{"anyOf":[{"anyOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"}],"maxLength":16},{"type":"null"}],"title":"Stop"},"routing":{"anyOf":[{"$ref":"#/components/schemas/RoutingParams"},{"type":"null"}]},"extended_thinking":{"type":"boolean","title":"Extended Thinking","description":"Allow the model's native reasoning/thinking trace. Off (default) returns a direct answer.","default":false}},"type":"object","required":["model","messages"],"title":"ChatCompletionRequest"},"ChatMessage":{"properties":{"role":{"type":"string","enum":["system","user","assistant"],"title":"Role"},"content":{"type":"string","title":"Content"}},"type":"object","required":["role","content"],"title":"ChatMessage"},"ClassifyRequest":{"properties":{"messages":{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array","maxItems":20,"minItems":1,"title":"Messages"},"optimize":{"type":"string","title":"Optimize","default":"balanced"}},"type":"object","required":["messages"],"title":"ClassifyRequest"},"ClearErrorsRequest":{"properties":{"api_source_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Source Slug"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","title":"ClearErrorsRequest"},"ClearErrorsResponse":{"properties":{"resolved":{"type":"integer","title":"Resolved"}},"type":"object","required":["resolved"],"title":"ClearErrorsResponse"},"ClusterMemberResponse":{"properties":{"model_id":{"type":"string","format":"uuid","title":"Model Id"},"slug":{"type":"string","title":"Slug"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"creator":{"type":"string","title":"Creator"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"context_window":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Context Window"},"param_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Param Count"},"capabilities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Capabilities"},"is_inference_enabled":{"type":"boolean","title":"Is Inference Enabled"},"updated_at":{"type":"string","title":"Updated At"}},"type":"object","required":["model_id","slug","name","creator","description","context_window","param_count","capabilities","is_inference_enabled","updated_at"],"title":"ClusterMemberResponse"},"ClusterResponse":{"properties":{"cluster_key":{"type":"string","title":"Cluster Key"},"heuristic":{"type":"string","title":"Heuristic"},"size":{"type":"integer","title":"Size"},"members":{"items":{"$ref":"#/components/schemas/ClusterMemberResponse"},"type":"array","title":"Members"}},"type":"object","required":["cluster_key","heuristic","size","members"],"title":"ClusterResponse"},"ClustersListResponse":{"properties":{"heuristic":{"type":"string","title":"Heuristic"},"total":{"type":"integer","title":"Total"},"clusters":{"items":{"$ref":"#/components/schemas/ClusterResponse"},"type":"array","title":"Clusters"}},"type":"object","required":["heuristic","total","clusters"],"title":"ClustersListResponse"},"CompareRequest":{"properties":{"model_slugs":{"items":{"type":"string"},"type":"array","maxItems":4,"minItems":2,"title":"Model Slugs","description":"List of model slugs to compare (2-4 models)"}},"type":"object","required":["model_slugs"],"title":"CompareRequest","description":"Request schema for model comparison"},"CompareResponse":{"properties":{"models":{"items":{"$ref":"#/components/schemas/AIModelDetail"},"type":"array","title":"Models","description":"Full details of compared models"},"insights":{"$ref":"#/components/schemas/ComparisonInsights","description":"Structured comparison insights"}},"type":"object","required":["models","insights"],"title":"CompareResponse","description":"Response schema for model comparison"},"ComparisonInsights":{"properties":{"capacity":{"$ref":"#/components/schemas/CapacityInsights","description":"Capacity rankings"},"capabilities":{"items":{"$ref":"#/components/schemas/CapabilityRow"},"type":"array","title":"Capabilities","description":"Capability support matrix"},"benchmarks":{"anyOf":[{"$ref":"#/components/schemas/BenchmarkSection"},{"type":"null"}],"description":"Benchmark scores by category (null if no benchmarks available)"}},"type":"object","required":["capacity","capabilities"],"title":"ComparisonInsights","description":"All structured comparison data"},"ConfigResponse":{"properties":{"config_key":{"type":"string","title":"Config Key"},"config_value":{"items":{},"type":"array","title":"Config Value"},"success":{"type":"boolean","title":"Success","default":true}},"type":"object","required":["config_key","config_value"],"title":"ConfigResponse"},"ContactFormRequest":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"email":{"type":"string","format":"email","title":"Email"},"company":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Company"},"message":{"type":"string","maxLength":5000,"minLength":10,"title":"Message"},"lead_type":{"$ref":"#/components/schemas/LeadTypeEnum","default":"general_enquiry"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"}},"additionalProperties":false,"type":"object","required":["name","email","message"],"title":"ContactFormRequest","description":"Schema for contact form submission"},"ConversationDetailResponse":{"properties":{"id":{"type":"string","title":"Id"},"title":{"type":"string","title":"Title"},"mode":{"type":"string","title":"Mode"},"model_config_json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Model Config Json"},"message_count":{"type":"integer","title":"Message Count"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"},"messages":{"items":{"$ref":"#/components/schemas/MessageResponse"},"type":"array","title":"Messages"}},"type":"object","required":["id","title","mode","model_config_json","message_count","created_at","updated_at","messages"],"title":"ConversationDetailResponse"},"ConversationListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ConversationResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"ConversationListResponse"},"ConversationResponse":{"properties":{"id":{"type":"string","title":"Id"},"title":{"type":"string","title":"Title"},"mode":{"type":"string","title":"Mode"},"model_config_json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Model Config Json"},"message_count":{"type":"integer","title":"Message Count"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"}},"type":"object","required":["id","title","mode","model_config_json","message_count","created_at","updated_at"],"title":"ConversationResponse"},"CostEstimate":{"properties":{"per_hour":{"type":"number","title":"Per Hour"},"per_million_tokens":{"type":"number","title":"Per Million Tokens"},"per_month":{"type":"number","title":"Per Month"},"gpu_price_per_hour":{"type":"number","title":"Gpu Price Per Hour"},"spot_per_hour":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Spot Per Hour"},"spot_per_month":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Spot Per Month"}},"type":"object","required":["per_hour","per_million_tokens","per_month","gpu_price_per_hour","spot_per_hour","spot_per_month"],"title":"CostEstimate"},"CoverageItem":{"properties":{"model_id":{"type":"string","format":"uuid","title":"Model Id"},"slug":{"type":"string","title":"Slug"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"upstream_model_id":{"type":"string","title":"Upstream Model Id"},"input_cost_per_1m":{"type":"number","title":"Input Cost Per 1M"},"output_cost_per_1m":{"type":"number","title":"Output Cost Per 1M"},"routed":{"type":"boolean","title":"Routed"},"route_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Route Status"}},"type":"object","required":["model_id","slug","display_name","upstream_model_id","input_cost_per_1m","output_cost_per_1m","routed","route_status"],"title":"CoverageItem","description":"One row in the platform Coverage tab.\n\n`routed=True` means there's already a model_routes row for this\n(model, vendor); the row is shown grayed out so the admin can spot\noverlap but can't re-add it. `routed=False` rows are the additions\nthat the bulk button will create."},"CoverageResponse":{"properties":{"vendor":{"type":"string","title":"Vendor"},"items":{"items":{"$ref":"#/components/schemas/CoverageItem"},"type":"array","title":"Items"},"routed_count":{"type":"integer","title":"Routed Count"},"not_routed_count":{"type":"integer","title":"Not Routed Count"}},"type":"object","required":["vendor","items","routed_count","not_routed_count"],"title":"CoverageResponse"},"CreateApiKeyRequest":{"properties":{"name":{"type":"string","maxLength":255,"title":"Name","default":"Default"},"model_pool":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Model Pool"},"optimize_mode":{"anyOf":[{"type":"string","enum":["balanced","quality","cost","latency"]},{"type":"null"}],"title":"Optimize Mode"},"preset":{"anyOf":[{"type":"string","enum":["strict","standard","permissive"]},{"type":"null"}],"title":"Preset"}},"type":"object","title":"CreateApiKeyRequest"},"CreateApiKeyResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"key":{"type":"string","title":"Key","description":"Full API key. Save this, it cannot be retrieved again."},"key_prefix":{"type":"string","title":"Key Prefix"},"name":{"type":"string","title":"Name"},"model_pool":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Model Pool"},"optimize_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Optimize Mode"},"preset":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preset"}},"type":"object","required":["id","key","key_prefix","name"],"title":"CreateApiKeyResponse"},"CreateBaseFromIdentityRequest":{"properties":{"slug":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Slug"},"display_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Display Name"},"family":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Family"}},"type":"object","title":"CreateBaseFromIdentityRequest","description":"Admin-supplied spec for the rare case where a vendor snapshot\ndeserves its own base. Used by the review queue's 'create new base'\naction when no existing base fits."},"CreateConversationRequest":{"properties":{"title":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Title"},"mode":{"type":"string","enum":["single","compare","routing"],"title":"Mode","default":"single"},"model_config_json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Model Config Json"}},"type":"object","title":"CreateConversationRequest"},"CreateSavedComparisonRequest":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"model_slugs":{"items":{"type":"string"},"type":"array","maxItems":10,"minItems":2,"title":"Model Slugs"},"notes":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Notes"},"source":{"type":"string","maxLength":50,"title":"Source","default":"compare"}},"additionalProperties":false,"type":"object","required":["name","model_slugs"],"title":"CreateSavedComparisonRequest","description":"Schema for creating a saved comparison"},"CreatorDetail":{"properties":{"slug":{"type":"string","title":"Slug"},"display_name":{"type":"string","title":"Display Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"homepage_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Homepage Url"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"is_active":{"type":"boolean","title":"Is Active"},"known_prefixes":{"items":{"type":"string"},"type":"array","title":"Known Prefixes","default":[]},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"model_count":{"type":"integer","title":"Model Count"}},"type":"object","required":["slug","display_name","is_active","created_at","updated_at","model_count"],"title":"CreatorDetail","description":"Full creator detail for edit page."},"CreatorListItem":{"properties":{"slug":{"type":"string","title":"Slug"},"display_name":{"type":"string","title":"Display Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"homepage_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Homepage Url"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"is_active":{"type":"boolean","title":"Is Active"},"model_count":{"type":"integer","title":"Model Count"}},"type":"object","required":["slug","display_name","is_active","model_count"],"title":"CreatorListItem","description":"Creator list item with computed fields."},"CreatorLogoResponse":{"properties":{"creator_slug":{"type":"string","title":"Creator Slug"},"creator_name":{"type":"string","title":"Creator Name"},"logo_url":{"type":"string","title":"Logo Url"},"filename":{"type":"string","title":"Filename"}},"type":"object","required":["creator_slug","creator_name","logo_url","filename"],"title":"CreatorLogoResponse","description":"Response from creator logo upload"},"CreatorOption":{"properties":{"slug":{"type":"string","title":"Slug"},"name":{"type":"string","title":"Name"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"model_count":{"type":"integer","title":"Model Count","default":0}},"type":"object","required":["slug","name"],"title":"CreatorOption","description":"Creator/provider option for filters"},"CreatorPrefixesResponse":{"properties":{"slug":{"type":"string","title":"Slug"},"known_prefixes":{"items":{"type":"string"},"type":"array","title":"Known Prefixes"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"auto_retry_sources":{"items":{"type":"string"},"type":"array","title":"Auto Retry Sources","default":[]},"auto_retry_resolved":{"type":"integer","title":"Auto Retry Resolved","default":0}},"type":"object","required":["slug","known_prefixes","updated_at"],"title":"CreatorPrefixesResponse"},"CreatorPrefixesUpdate":{"properties":{"prefixes":{"items":{"type":"string"},"type":"array","minItems":0,"title":"Prefixes","description":"Replaces the full list of known_prefixes"}},"type":"object","required":["prefixes"],"title":"CreatorPrefixesUpdate","description":"Request body for editing known_prefixes."},"CreatorUpdate":{"properties":{"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"homepage_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Homepage Url"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"CreatorUpdate","description":"Request body for updating a creator."},"CreatorsListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/CreatorListItem"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"total_pages":{"type":"integer","title":"Total Pages"}},"type":"object","required":["items","total","page","page_size","total_pages"],"title":"CreatorsListResponse","description":"Paginated creators response."},"CreditAdjustmentRequest":{"properties":{"amount_cents":{"type":"integer","title":"Amount Cents","description":"Positive to grant, negative to deduct"},"reason":{"type":"string","maxLength":50,"title":"Reason","description":"Transaction type: signup_bonus, admin_grant, admin_refund, promo, admin_adjustment"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description","description":"Human-readable note"}},"type":"object","required":["amount_cents","reason"],"title":"CreditAdjustmentRequest","description":"Request to grant or deduct inference credits."},"CreditAdjustmentResponse":{"properties":{"user_id":{"type":"string","format":"uuid","title":"User Id"},"amount_cents":{"type":"integer","title":"Amount Cents"},"new_balance_cents":{"type":"integer","title":"New Balance Cents"},"transaction_type":{"type":"string","title":"Transaction Type"}},"type":"object","required":["user_id","amount_cents","new_balance_cents","transaction_type"],"title":"CreditAdjustmentResponse"},"CreditBalanceResponse":{"properties":{"balance_cents":{"type":"integer","title":"Balance Cents"},"balance_formatted":{"type":"string","title":"Balance Formatted"}},"type":"object","required":["balance_cents","balance_formatted"],"title":"CreditBalanceResponse"},"CreditTransactionResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"amount_cents":{"type":"integer","title":"Amount Cents"},"balance_after_cents":{"type":"integer","title":"Balance After Cents"},"transaction_type":{"type":"string","title":"Transaction Type"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"usage_log_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Usage Log Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","amount_cents","balance_after_cents","transaction_type","description","usage_log_id","created_at"],"title":"CreditTransactionResponse"},"DashboardResponse":{"properties":{"stats":{"$ref":"#/components/schemas/DashboardStats"},"recent_activity":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Recent Activity"}},"type":"object","required":["stats"],"title":"DashboardResponse","description":"Full dashboard response with stats and recent activity."},"DashboardStats":{"properties":{"total_models":{"type":"integer","title":"Total Models"},"active_models":{"type":"integer","title":"Active Models"},"total_gpus":{"type":"integer","title":"Total Gpus"},"total_creators":{"type":"integer","title":"Total Creators"},"total_api_sources":{"type":"integer","title":"Total Api Sources"},"total_hosting_platforms":{"type":"integer","title":"Total Hosting Platforms"},"total_leads":{"type":"integer","title":"Total Leads"},"total_users":{"type":"integer","title":"Total Users"},"active_users":{"type":"integer","title":"Active Users"},"recent_signups":{"type":"integer","title":"Recent Signups"},"total_providers":{"type":"integer","title":"Total Providers","default":0},"total_raw_records":{"type":"integer","title":"Total Raw Records","default":0},"tier_distribution":{"$ref":"#/components/schemas/TierDistribution"}},"type":"object","required":["total_models","active_models","total_gpus","total_creators","total_api_sources","total_hosting_platforms","total_leads","total_users","active_users","recent_signups","tier_distribution"],"title":"DashboardStats","description":"Dashboard overview statistics."},"DeactivateRequest":{"properties":{"reason":{"type":"string","maxLength":100,"minLength":1,"title":"Reason"}},"type":"object","required":["reason"],"title":"DeactivateRequest"},"DeleteAccountRequest":{"properties":{"password":{"type":"string","minLength":1,"title":"Password"}},"additionalProperties":false,"type":"object","required":["password"],"title":"DeleteAccountRequest","description":"Schema for account deletion request"},"DeleteAllResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"},"deleted_count":{"type":"integer","title":"Deleted Count"}},"type":"object","required":["success","message","deleted_count"],"title":"DeleteAllResponse","description":"Response for bulk delete operations."},"DeleteResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"},"deleted_count":{"type":"integer","title":"Deleted Count"}},"type":"object","required":["success","message","deleted_count"],"title":"DeleteResponse","description":"Response for delete operations."},"DemoRequestForm":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"email":{"type":"string","format":"email","title":"Email"},"company":{"type":"string","maxLength":255,"minLength":1,"title":"Company"},"role":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Role"},"message":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Message"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"}},"additionalProperties":false,"type":"object","required":["name","email","company"],"title":"DemoRequestForm","description":"Schema for demo/enterprise request"},"DescriptionRunResponse":{"properties":{"requested":{"type":"integer","title":"Requested"},"generated":{"type":"integer","title":"Generated"},"failed":{"type":"integer","title":"Failed"},"skipped":{"type":"integer","title":"Skipped"},"dry_run":{"type":"boolean","title":"Dry Run"},"sample":{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array","title":"Sample"},"errors":{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array","title":"Errors"}},"type":"object","required":["requested","generated","failed","skipped","dry_run","sample","errors"],"title":"DescriptionRunResponse"},"DocContent":{"properties":{"slug":{"type":"string","title":"Slug"},"title":{"type":"string","title":"Title"},"content":{"type":"string","title":"Content"}},"type":"object","required":["slug","title","content"],"title":"DocContent"},"DocListItem":{"properties":{"slug":{"type":"string","title":"Slug"},"title":{"type":"string","title":"Title"},"filename":{"type":"string","title":"Filename"}},"type":"object","required":["slug","title","filename"],"title":"DocListItem"},"EmailVerifyRequest":{"properties":{"token":{"type":"string","title":"Token","description":"Email verification token"}},"type":"object","required":["token"],"title":"EmailVerifyRequest","description":"Schema for email verification with token"},"EngineMetadata":{"properties":{"engine_version":{"type":"string","const":"1.0.0","title":"Engine Version","default":"1.0.0"},"architecture_anchor_count":{"type":"integer","title":"Architecture Anchor Count","default":9},"candidate_gpus_evaluated":{"type":"integer","title":"Candidate Gpus Evaluated"},"candidate_gpus_filtered_out":{"type":"integer","title":"Candidate Gpus Filtered Out"},"sort_key":{"type":"string","title":"Sort Key","default":"meets_latency_target_desc, total_gpus_asc, vram_utilization_desc, decode_throughput_desc"}},"type":"object","required":["candidate_gpus_evaluated","candidate_gpus_filtered_out"],"title":"EngineMetadata"},"EnrichRequest":{"properties":{"creators":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Creators","description":"Restrict to these creator slugs (empty/None = all creators)"},"limit":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Limit","description":"Max models to enrich per run (LLM calls = limit)","default":10},"dry_run":{"type":"boolean","title":"Dry Run","description":"Run the LLM but skip persistence, for admin preview","default":false},"regenerate":{"type":"boolean","title":"Regenerate","description":"Also re-do existing ai_generated values (not just missing), leaving real creator-API ones untouched. Use to apply a grounding/prompt/vocabulary upgrade.","default":false}},"type":"object","title":"EnrichRequest"},"EnrichmentRunProgress":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"kind":{"type":"string","title":"Kind"},"status":{"type":"string","title":"Status"},"creator":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Creator"},"regenerate":{"type":"boolean","title":"Regenerate"},"total":{"type":"integer","title":"Total"},"succeeded":{"type":"integer","title":"Succeeded"},"failed":{"type":"integer","title":"Failed"},"skipped":{"type":"integer","title":"Skipped"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"errors":{"anyOf":[{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array"},{"type":"null"}],"title":"Errors"}},"type":"object","required":["id","kind","status","creator","regenerate","total","succeeded","failed","skipped","started_at","completed_at","error_message"],"title":"EnrichmentRunProgress"},"EntitlementsResponse":{"properties":{"tier":{"type":"string","title":"Tier"},"features":{"additionalProperties":{"$ref":"#/components/schemas/FeatureAccess"},"type":"object","title":"Features"},"resources":{"additionalProperties":{"$ref":"#/components/schemas/ResourceAccess"},"type":"object","title":"Resources"}},"type":"object","required":["tier","features","resources"],"title":"EntitlementsResponse"},"ExtractRequest":{"properties":{"text_content":{"type":"string","maxLength":200000,"minLength":100,"title":"Text Content"},"extraction_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Extraction Prompt","description":"Custom prompt for data extraction. If not provided, uses default model extraction prompt."}},"type":"object","required":["text_content"],"title":"ExtractRequest","description":"Request to extract structured data from text using Claude"},"ExtractResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"models":{"items":{"$ref":"#/components/schemas/ExtractedModel"},"type":"array","title":"Models","default":[]},"extraction_time_ms":{"type":"integer","title":"Extraction Time Ms","default":0},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["success"],"title":"ExtractResponse","description":"Response from AI extraction"},"ExtractedModel":{"properties":{"name":{"type":"string","title":"Name"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"context_window":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Context Window"},"max_output_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Output Tokens"},"input_price_per_million":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Input Price Per Million"},"output_price_per_million":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Output Price Per Million"},"modalities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Modalities"},"capabilities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Capabilities"},"release_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Release Date"},"raw_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Raw Data","description":"Any additional extracted fields"}},"type":"object","required":["name"],"title":"ExtractedModel","description":"Extracted model data"},"FavoriteCheckResponse":{"properties":{"is_favorited":{"type":"boolean","title":"Is Favorited"},"favorite_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Favorite Id"}},"type":"object","required":["is_favorited"],"title":"FavoriteCheckResponse","description":"Response for checking if a model is favorited"},"FavoriteModel":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"model_identity_id":{"type":"string","format":"uuid","title":"Model Identity Id"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"model_identity":{"anyOf":[{"$ref":"#/components/schemas/FavoriteModelIdentity"},{"type":"null"}]}},"type":"object","required":["id","user_id","model_identity_id","created_at"],"title":"FavoriteModel","description":"Schema for a favorited model response"},"FavoriteModelIdentity":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"creator":{"type":"string","title":"Creator"},"model_key":{"type":"string","title":"Model Key"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"family":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Family"},"creator_logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Creator Logo Url"}},"type":"object","required":["id","creator","model_key"],"title":"FavoriteModelIdentity","description":"Embedded model identity info for favorites"},"FavoritesList":{"properties":{"items":{"items":{"$ref":"#/components/schemas/FavoriteModel"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"total_pages":{"type":"integer","title":"Total Pages"}},"type":"object","required":["items","total","page","page_size","total_pages"],"title":"FavoritesList","description":"Paginated list of user favorites"},"FeatureAccess":{"properties":{"allowed":{"type":"boolean","title":"Allowed"}},"type":"object","required":["allowed"],"title":"FeatureAccess"},"FeedbackRequest":{"properties":{"rating":{"anyOf":[{"type":"integer","enum":[-1,1]},{"type":"null"}],"title":"Rating","description":"+1 for thumbs up, -1 for thumbs down, null to clear an existing rating."}},"type":"object","required":["rating"],"title":"FeedbackRequest"},"FeedbackResponse":{"properties":{"usage_log_id":{"type":"string","format":"uuid","title":"Usage Log Id"},"rating":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rating"},"feedback_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Feedback At"}},"type":"object","required":["usage_log_id","rating","feedback_at"],"title":"FeedbackResponse"},"FetchPreviewResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message","default":""},"total_count":{"type":"integer","title":"Total Count","default":0},"sample_records":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Sample Records","default":[]},"sample_envelopes":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Sample Envelopes","default":[]},"sample_skipped":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Sample Skipped","default":[]},"formatter_present":{"type":"boolean","title":"Formatter Present","default":false},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["success"],"title":"FetchPreviewResponse"},"FilterOptionsResponse":{"properties":{"creators":{"items":{"$ref":"#/components/schemas/CreatorOption"},"type":"array","title":"Creators","default":[]},"input_modalities":{"items":{"type":"string"},"type":"array","title":"Input Modalities","default":[]},"output_modalities":{"items":{"type":"string"},"type":"array","title":"Output Modalities","default":[]},"capabilities":{"items":{"type":"string"},"type":"array","title":"Capabilities","default":[]},"model_types":{"items":{"type":"string"},"type":"array","title":"Model Types","default":[]},"licenses":{"items":{"type":"string"},"type":"array","title":"Licenses","default":[]},"context_window":{"$ref":"#/components/schemas/RangeOption","default":{}},"param_count":{"$ref":"#/components/schemas/RangeOption","default":{}},"total_models":{"type":"integer","title":"Total Models","default":0}},"type":"object","title":"FilterOptionsResponse","description":"Available filter options aggregated from the database"},"FleetItem":{"properties":{"model_id":{"type":"string","format":"uuid","title":"Model Id"},"slug":{"type":"string","title":"Slug"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"is_inference_enabled":{"type":"boolean","title":"Is Inference Enabled"},"platforms":{"items":{"$ref":"#/components/schemas/FleetPlatformStatus"},"type":"array","title":"Platforms"}},"type":"object","required":["model_id","slug","display_name","is_inference_enabled","platforms"],"title":"FleetItem"},"FleetPlatformStatus":{"properties":{"vendor":{"type":"string","title":"Vendor"},"status":{"type":"string","enum":["active","degraded","disabled","available","unavailable"],"title":"Status"},"route_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Route Id"},"priority":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Priority"}},"type":"object","required":["vendor","status"],"title":"FleetPlatformStatus"},"FleetResponse":{"properties":{"vendors":{"items":{"type":"string"},"type":"array","title":"Vendors"},"items":{"items":{"$ref":"#/components/schemas/FleetItem"},"type":"array","title":"Items"}},"type":"object","required":["vendors","items"],"title":"FleetResponse"},"GPUCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"manufacturer":{"type":"string","maxLength":100,"minLength":1,"title":"Manufacturer"},"vram_gb":{"type":"integer","maximum":1000.0,"minimum":1.0,"title":"Vram Gb"},"gpu_type":{"$ref":"#/components/schemas/GPUTypeEnum","default":"datacenter"},"slug":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Slug"},"memory_type":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Memory Type"},"memory_bandwidth_gbps":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Memory Bandwidth Gbps"},"architecture":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Architecture"},"compute_cores":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Compute Cores"},"ai_accelerators":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Ai Accelerators"},"fp16_tflops":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Fp16 Tflops"},"fp32_tflops":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Fp32 Tflops"},"bf16_tflops":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Bf16 Tflops"},"int8_tops":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Int8 Tops"},"tdp_watts":{"anyOf":[{"type":"integer","maximum":2000.0,"minimum":0.0},{"type":"null"}],"title":"Tdp Watts"},"max_power_watts":{"anyOf":[{"type":"integer","maximum":2000.0,"minimum":0.0},{"type":"null"}],"title":"Max Power Watts"},"form_factor":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Form Factor"},"pcie_gen":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Pcie Gen"},"interconnect_support":{"type":"boolean","title":"Interconnect Support","default":false},"interconnect_bandwidth_gbps":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Interconnect Bandwidth Gbps"},"release_year":{"anyOf":[{"type":"integer","maximum":2030.0,"minimum":2010.0},{"type":"null"}],"title":"Release Year"},"msrp_usd":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Msrp Usd"},"is_active":{"type":"boolean","title":"Is Active","default":true},"datasheet_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Datasheet Url"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["name","manufacturer","vram_gb"],"title":"GPUCreate","description":"Schema for creating a new GPU"},"GPUDetail":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"slug":{"type":"string","title":"Slug"},"name":{"type":"string","title":"Name"},"manufacturer":{"type":"string","title":"Manufacturer"},"manufacturer_info":{"anyOf":[{"$ref":"#/components/schemas/GPUManufacturerInfo"},{"type":"null"}]},"vram_gb":{"type":"integer","title":"Vram Gb"},"memory_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Memory Type"},"memory_bandwidth_gbps":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Memory Bandwidth Gbps"},"architecture":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Architecture"},"fp16_tflops":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fp16 Tflops"},"fp32_tflops":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fp32 Tflops"},"bf16_tflops":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Bf16 Tflops"},"int8_tops":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Int8 Tops"},"compute_cores":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Compute Cores"},"ai_accelerators":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ai Accelerators"},"form_factor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Form Factor"},"pcie_gen":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pcie Gen"},"interconnect_support":{"type":"boolean","title":"Interconnect Support","default":false},"interconnect_bandwidth_gbps":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Interconnect Bandwidth Gbps"},"tdp_watts":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tdp Watts"},"gpu_type":{"$ref":"#/components/schemas/GPUTypeEnum"},"release_year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Release Year"},"is_active":{"type":"boolean","title":"Is Active","default":true},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"max_power_watts":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Power Watts"},"msrp_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Msrp Usd"},"datasheet_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Datasheet Url"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","slug","name","manufacturer","vram_gb","gpu_type","updated_at","created_at"],"title":"GPUDetail","description":"Full GPU details including all specifications"},"GPUImportPreviewItem":{"properties":{"row_number":{"type":"integer","title":"Row Number"},"name":{"type":"string","title":"Name"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"status":{"type":"string","title":"Status"},"changes":{"additionalProperties":true,"type":"object","title":"Changes"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["row_number","name","slug","status","changes"],"title":"GPUImportPreviewItem","description":"Single row preview in import."},"GPUImportPreviewResponse":{"properties":{"total_rows":{"type":"integer","title":"Total Rows"},"gpus_to_create":{"type":"integer","title":"Gpus To Create"},"gpus_to_update":{"type":"integer","title":"Gpus To Update"},"gpus_skipped":{"type":"integer","title":"Gpus Skipped"},"errors":{"type":"integer","title":"Errors"},"preview":{"items":{"$ref":"#/components/schemas/GPUImportPreviewItem"},"type":"array","title":"Preview"}},"type":"object","required":["total_rows","gpus_to_create","gpus_to_update","gpus_skipped","errors","preview"],"title":"GPUImportPreviewResponse","description":"Preview of import changes."},"GPUImportResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"total_rows":{"type":"integer","title":"Total Rows"},"gpus_created":{"type":"integer","title":"Gpus Created"},"gpus_updated":{"type":"integer","title":"Gpus Updated"},"gpus_skipped":{"type":"integer","title":"Gpus Skipped"},"errors":{"type":"integer","title":"Errors"},"results":{"items":{"$ref":"#/components/schemas/GPUImportResultItem"},"type":"array","title":"Results"}},"type":"object","required":["success","total_rows","gpus_created","gpus_updated","gpus_skipped","errors","results"],"title":"GPUImportResponse","description":"Result of import operation."},"GPUImportResultItem":{"properties":{"row_number":{"type":"integer","title":"Row Number"},"name":{"type":"string","title":"Name"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"status":{"type":"string","title":"Status"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["row_number","name","slug","status"],"title":"GPUImportResultItem","description":"Single row result in import."},"GPUListItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"slug":{"type":"string","title":"Slug"},"name":{"type":"string","title":"Name"},"manufacturer":{"type":"string","title":"Manufacturer"},"manufacturer_info":{"anyOf":[{"$ref":"#/components/schemas/GPUManufacturerInfo"},{"type":"null"}]},"vram_gb":{"type":"integer","title":"Vram Gb"},"memory_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Memory Type"},"memory_bandwidth_gbps":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Memory Bandwidth Gbps"},"architecture":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Architecture"},"fp16_tflops":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fp16 Tflops"},"fp32_tflops":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fp32 Tflops"},"bf16_tflops":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Bf16 Tflops"},"int8_tops":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Int8 Tops"},"compute_cores":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Compute Cores"},"ai_accelerators":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ai Accelerators"},"form_factor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Form Factor"},"pcie_gen":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pcie Gen"},"interconnect_support":{"type":"boolean","title":"Interconnect Support","default":false},"interconnect_bandwidth_gbps":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Interconnect Bandwidth Gbps"},"tdp_watts":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tdp Watts"},"gpu_type":{"$ref":"#/components/schemas/GPUTypeEnum"},"release_year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Release Year"},"is_active":{"type":"boolean","title":"Is Active","default":true},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","slug","name","manufacturer","vram_gb","gpu_type"],"title":"GPUListItem","description":"GPU schema for list view"},"GPUListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/GPUListItem"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page","default":1},"page_size":{"type":"integer","title":"Page Size","default":50},"total_pages":{"type":"integer","title":"Total Pages","default":1},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"},"has_next":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Next"}},"type":"object","required":["items","total"],"title":"GPUListResponse","description":"Paginated list of GPUs"},"GPUManufacturerCreate":{"properties":{"display_name":{"type":"string","maxLength":200,"minLength":1,"title":"Display Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"homepage_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Homepage Url"},"logo_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Logo Url"},"is_active":{"type":"boolean","title":"Is Active","default":true},"slug":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Slug"}},"type":"object","required":["display_name"],"title":"GPUManufacturerCreate","description":"Schema for creating a GPU manufacturer"},"GPUManufacturerDetail":{"properties":{"slug":{"type":"string","title":"Slug"},"display_name":{"type":"string","title":"Display Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"homepage_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Homepage Url"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"is_active":{"type":"boolean","title":"Is Active","default":true},"gpu_count":{"type":"integer","title":"Gpu Count","default":0},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["slug","display_name","created_at","updated_at"],"title":"GPUManufacturerDetail","description":"Full GPU Manufacturer details"},"GPUManufacturerInfo":{"properties":{"slug":{"type":"string","title":"Slug"},"display_name":{"type":"string","title":"Display Name"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"homepage_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Homepage Url"}},"type":"object","required":["slug","display_name"],"title":"GPUManufacturerInfo","description":"Embedded manufacturer info for GPU responses"},"GPUManufacturerListItem":{"properties":{"slug":{"type":"string","title":"Slug"},"display_name":{"type":"string","title":"Display Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"homepage_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Homepage Url"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"is_active":{"type":"boolean","title":"Is Active","default":true},"gpu_count":{"type":"integer","title":"Gpu Count","default":0}},"type":"object","required":["slug","display_name"],"title":"GPUManufacturerListItem","description":"GPU Manufacturer for list view"},"GPUManufacturerListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/GPUManufacturerListItem"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"total_pages":{"type":"integer","title":"Total Pages"}},"type":"object","required":["items","total","page","page_size","total_pages"],"title":"GPUManufacturerListResponse","description":"List of GPU manufacturers"},"GPUManufacturerUpdate":{"properties":{"display_name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Display Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"homepage_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Homepage Url"},"logo_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Logo Url"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"additionalProperties":false,"type":"object","title":"GPUManufacturerUpdate","description":"Schema for updating a GPU manufacturer"},"GPUPricingItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"gpu_slug":{"type":"string","title":"Gpu Slug"},"provider":{"type":"string","title":"Provider"},"on_demand_per_hour":{"type":"number","title":"On Demand Per Hour"},"spot_per_hour":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Spot Per Hour"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"is_active":{"type":"boolean","title":"Is Active","default":true},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","gpu_slug","provider","on_demand_per_hour","updated_at"],"title":"GPUPricingItem","description":"Single pricing entry for a GPU on a specific provider"},"GPUPricingListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/GPUPricingItem"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"GPUPricingListResponse","description":"All pricing data"},"GPUSummary":{"properties":{"slug":{"type":"string","title":"Slug"},"name":{"type":"string","title":"Name"},"manufacturer":{"type":"string","title":"Manufacturer"},"vram_gb":{"type":"integer","title":"Vram Gb"},"memory_bandwidth_gbps":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Memory Bandwidth Gbps"},"fp16_tflops":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fp16 Tflops"},"architecture":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Architecture"},"interconnect_support":{"type":"boolean","title":"Interconnect Support"}},"type":"object","required":["slug","name","manufacturer","vram_gb","memory_bandwidth_gbps","fp16_tflops","architecture","interconnect_support"],"title":"GPUSummary"},"GPUTypeEnum":{"type":"string","enum":["datacenter","consumer","workstation"],"title":"GPUTypeEnum","description":"GPU type classification"},"GPUUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Name"},"manufacturer":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Manufacturer"},"vram_gb":{"anyOf":[{"type":"integer","maximum":1000.0,"minimum":1.0},{"type":"null"}],"title":"Vram Gb"},"gpu_type":{"anyOf":[{"$ref":"#/components/schemas/GPUTypeEnum"},{"type":"null"}]},"memory_type":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Memory Type"},"memory_bandwidth_gbps":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Memory Bandwidth Gbps"},"architecture":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Architecture"},"compute_cores":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Compute Cores"},"ai_accelerators":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Ai Accelerators"},"fp16_tflops":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Fp16 Tflops"},"fp32_tflops":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Fp32 Tflops"},"bf16_tflops":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Bf16 Tflops"},"int8_tops":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Int8 Tops"},"tdp_watts":{"anyOf":[{"type":"integer","maximum":2000.0,"minimum":0.0},{"type":"null"}],"title":"Tdp Watts"},"max_power_watts":{"anyOf":[{"type":"integer","maximum":2000.0,"minimum":0.0},{"type":"null"}],"title":"Max Power Watts"},"form_factor":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Form Factor"},"pcie_gen":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Pcie Gen"},"interconnect_support":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Interconnect Support"},"interconnect_bandwidth_gbps":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Interconnect Bandwidth Gbps"},"release_year":{"anyOf":[{"type":"integer","maximum":2030.0,"minimum":2010.0},{"type":"null"}],"title":"Release Year"},"msrp_usd":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Msrp Usd"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"datasheet_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Datasheet Url"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","title":"GPUUpdate","description":"Schema for updating a GPU (all fields optional)"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HostMetadata":{"properties":{"slug":{"type":"string","title":"Slug"},"name":{"type":"string","title":"Name"}},"type":"object","required":["slug","name"],"title":"HostMetadata","description":"Metadata for a hosting provider."},"IdentityResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"creator":{"type":"string","title":"Creator"},"model_key":{"type":"string","title":"Model Key"},"variant_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant Label"},"variant_kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant Kind"},"source":{"type":"string","title":"Source"},"base_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Base Id"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"is_active":{"type":"boolean","title":"Is Active"},"deactivated_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deactivated Reason"}},"type":"object","required":["id","creator","model_key","variant_label","variant_kind","source","base_id","display_name","is_active","deactivated_reason"],"title":"IdentityResponse","description":"One identity row, as surfaced by the merge-tool primitives."},"InferenceCatalogItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"model_identity_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Model Identity Id"},"slug":{"type":"string","title":"Slug"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"creator":{"type":"string","title":"Creator"},"model_key":{"type":"string","title":"Model Key"},"model_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Type"},"param_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Param Count"},"context_window":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Context Window"},"max_output_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Output Tokens"},"input_modalities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Input Modalities"},"output_modalities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Output Modalities"},"capabilities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Capabilities"},"license":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"License"},"is_featured":{"type":"boolean","title":"Is Featured","default":false},"is_visible":{"type":"boolean","title":"Is Visible","default":true},"is_open_source":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Open Source"},"inference_available":{"type":"boolean","title":"Inference Available","default":false},"inference_model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inference Model Id"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"like_count":{"type":"integer","title":"Like Count","default":0},"input_cost_per_1m":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Input Cost Per 1M"},"output_cost_per_1m":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Output Cost Per 1M"},"param_count_display":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Param Count Display","description":"Compute display string from param_count (e.g., 70B from 70000000000)","readOnly":true},"parameters":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parameters","description":"Alias for param_count_display (e.g., '175B')","readOnly":true},"provider":{"$ref":"#/components/schemas/ProviderResponse","description":"Generate provider object from creator with creator info.","readOnly":true}},"type":"object","required":["id","slug","creator","model_key","param_count_display","parameters","provider"],"title":"InferenceCatalogItem","description":"Inference-routable model with aggregate third-party pricing.\n\nSerialized only via /api/v1/inference/catalog (auth required)."},"InferenceCatalogResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/InferenceCatalogItem"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"total_pages":{"type":"integer","title":"Total Pages"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"},"has_next":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Next"}},"type":"object","required":["items","total","page","page_size","total_pages"],"title":"InferenceCatalogResponse","description":"Paginated inference catalog (auth-only)."},"InferenceStatsResponse":{"properties":{"total_requests":{"type":"integer","title":"Total Requests"},"total_tokens":{"type":"integer","title":"Total Tokens"},"total_cost_cents":{"type":"integer","title":"Total Cost Cents"},"avg_latency_ms":{"type":"integer","title":"Avg Latency Ms"},"error_count":{"type":"integer","title":"Error Count"},"unique_users":{"type":"integer","title":"Unique Users"},"top_models":{"items":{"$ref":"#/components/schemas/ModelUsageStat"},"type":"array","title":"Top Models"}},"type":"object","required":["total_requests","total_tokens","total_cost_cents","avg_latency_ms","error_count","unique_users","top_models"],"title":"InferenceStatsResponse"},"IngestSourceRequest":{"properties":{"limit":{"anyOf":[{"type":"integer","maximum":10000.0,"minimum":1.0},{"type":"null"}],"title":"Limit","description":"Cap snapshots processed this run"},"allow_create":{"type":"boolean","title":"Allow Create","description":"Per-run override: set false to force this run into enrich-only mode regardless of the source's can_bootstrap flag. Default true respects the source's configured can_bootstrap value.","default":true}},"type":"object","title":"IngestSourceRequest","description":"Optional knobs for an ingest run."},"IngestSourceResponse":{"properties":{"run_id":{"type":"string","format":"uuid","title":"Run Id"},"api_source_slug":{"type":"string","title":"Api Source Slug"},"snapshots_total":{"type":"integer","title":"Snapshots Total"},"succeeded":{"type":"integer","title":"Succeeded"},"failed":{"type":"integer","title":"Failed"},"identities_touched":{"type":"integer","title":"Identities Touched"},"models_created":{"type":"integer","title":"Models Created","default":0},"snapshots_applied":{"type":"integer","title":"Snapshots Applied","default":0},"snapshots_unchanged":{"type":"integer","title":"Snapshots Unchanged","default":0},"snapshots_skipped":{"type":"integer","title":"Snapshots Skipped","default":0},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"error_reasons":{"additionalProperties":{"type":"integer"},"type":"object","title":"Error Reasons"}},"type":"object","required":["run_id","api_source_slug","snapshots_total","succeeded","failed","identities_touched"],"title":"IngestSourceResponse"},"IngestionErrorItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"raw_snapshot_id":{"type":"string","format":"uuid","title":"Raw Snapshot Id"},"api_source_slug":{"type":"string","title":"Api Source Slug"},"source_model_id":{"type":"string","title":"Source Model Id"},"reason":{"type":"string","title":"Reason"},"error_detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Detail"},"resolved_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Resolved At"},"resolved_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resolved By"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","raw_snapshot_id","api_source_slug","source_model_id","reason","error_detail","resolved_at","resolved_by","created_at"],"title":"IngestionErrorItem"},"IngestionErrorListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/IngestionErrorItem"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"pages":{"type":"integer","title":"Pages"}},"type":"object","required":["items","total","page","page_size","pages"],"title":"IngestionErrorListResponse"},"IngestionErrorStatsResponse":{"properties":{"by_reason":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Reason"},"by_source":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Source"},"unresolved":{"type":"integer","title":"Unresolved"},"resolved":{"type":"integer","title":"Resolved"}},"type":"object","required":["by_reason","by_source","unresolved","resolved"],"title":"IngestionErrorStatsResponse"},"IngestionRunProgress":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"api_source_slug":{"type":"string","title":"Api Source Slug"},"status":{"type":"string","title":"Status"},"snapshots_total":{"type":"integer","title":"Snapshots Total"},"succeeded":{"type":"integer","title":"Succeeded"},"failed":{"type":"integer","title":"Failed"},"snapshots_skipped":{"type":"integer","title":"Snapshots Skipped"},"identities_touched":{"type":"integer","title":"Identities Touched"},"materialize_total":{"type":"integer","title":"Materialize Total"},"materialize_completed":{"type":"integer","title":"Materialize Completed"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"}},"type":"object","required":["id","api_source_slug","status","snapshots_total","succeeded","failed","snapshots_skipped","identities_touched","materialize_total","materialize_completed","started_at","completed_at","error_message"],"title":"IngestionRunProgress"},"LatencyEstimate":{"properties":{"ttft_ms":{"$ref":"#/components/schemas/LatencyPercentiles"},"tbt_ms":{"$ref":"#/components/schemas/LatencyPercentiles"},"total_ms":{"$ref":"#/components/schemas/LatencyPercentiles"}},"type":"object","required":["ttft_ms","tbt_ms","total_ms"],"title":"LatencyEstimate"},"LatencyPercentiles":{"properties":{"p50":{"type":"number","title":"P50"},"p95":{"type":"number","title":"P95"},"p99":{"type":"number","title":"P99"}},"type":"object","required":["p50","p95","p99"],"title":"LatencyPercentiles"},"LeadCreateRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Name"},"email":{"type":"string","format":"email","title":"Email"},"company":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Company"},"role":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Role"},"source":{"$ref":"#/components/schemas/LeadSourceEnum","default":"other"},"lead_type":{"$ref":"#/components/schemas/LeadTypeEnum","default":"general_enquiry"},"message":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Message"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"}},"additionalProperties":false,"type":"object","required":["email"],"title":"LeadCreateRequest","description":"Schema for submitting a new lead (public endpoint)"},"LeadListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/LeadResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"total_pages":{"type":"integer","title":"Total Pages"}},"type":"object","required":["items","total","page","page_size","total_pages"],"title":"LeadListResponse","description":"Paginated list of leads (admin)"},"LeadResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"email":{"type":"string","title":"Email"},"company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"},"source":{"type":"string","title":"Source"},"lead_type":{"type":"string","title":"Lead Type"},"status":{"type":"string","title":"Status"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"},"email_sent":{"type":"boolean","title":"Email Sent"},"email_sent_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Email Sent At"},"newsletter_subscribed":{"type":"boolean","title":"Newsletter Subscribed"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["id","email","source","lead_type","status","email_sent","newsletter_subscribed","created_at"],"title":"LeadResponse","description":"Schema for lead response"},"LeadSourceEnum":{"type":"string","enum":["contact_form","cta_hero","cta_pricing","cta_feature","newsletter","demo_request","upgrade_prompt","other"],"title":"LeadSourceEnum","description":"Where the lead came from"},"LeadStatsResponse":{"properties":{"total_leads":{"type":"integer","title":"Total Leads"},"new_leads":{"type":"integer","title":"New Leads"},"newsletter_subscribers":{"type":"integer","title":"Newsletter Subscribers"},"leads_by_source":{"additionalProperties":{"type":"integer"},"type":"object","title":"Leads By Source"},"leads_by_type":{"additionalProperties":{"type":"integer"},"type":"object","title":"Leads By Type"},"leads_this_week":{"type":"integer","title":"Leads This Week"},"leads_this_month":{"type":"integer","title":"Leads This Month"}},"type":"object","required":["total_leads","new_leads","newsletter_subscribers","leads_by_source","leads_by_type","leads_this_week","leads_this_month"],"title":"LeadStatsResponse","description":"Lead statistics for admin dashboard"},"LeadStatusEnum":{"type":"string","enum":["new","contacted","qualified","converted","closed"],"title":"LeadStatusEnum","description":"Lead processing status"},"LeadSubmitResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"},"lead_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Lead Id"}},"type":"object","required":["success","message"],"title":"LeadSubmitResponse","description":"Response after submitting a lead"},"LeadTypeEnum":{"type":"string","enum":["general_enquiry","feedback","bug_report","feature_request","partnership","enterprise","newsletter","limit_reset","other"],"title":"LeadTypeEnum","description":"Type of lead/enquiry"},"LeadUpdateRequest":{"properties":{"status":{"anyOf":[{"$ref":"#/components/schemas/LeadStatusEnum"},{"type":"null"}]},"notes":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Notes"},"newsletter_subscribed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Newsletter Subscribed"}},"additionalProperties":false,"type":"object","title":"LeadUpdateRequest","description":"Schema for admin to update a lead"},"LimitResetRequest":{"properties":{"limit_type":{"type":"string","maxLength":100,"minLength":1,"title":"Limit Type"},"message":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Message"}},"additionalProperties":false,"type":"object","required":["limit_type"],"title":"LimitResetRequest","description":"Schema for beta limit reset request (authenticated users only)"},"LinkPendingRequest":{"properties":{"base_id":{"type":"string","format":"uuid","title":"Base Id"},"variant_label":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Variant Label"},"variant_kind":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Variant Kind"}},"type":"object","required":["base_id"],"title":"LinkPendingRequest"},"LogoutRequest":{"properties":{"refresh_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Refresh Token"}},"type":"object","title":"LogoutRequest","description":"Optional body for logout, allows blacklisting the refresh token too."},"MemoryBudget":{"properties":{"model_weights_gb":{"type":"number","title":"Model Weights Gb"},"kv_cache_per_request_gb":{"type":"number","title":"Kv Cache Per Request Gb"},"kv_cache_total_gb":{"type":"number","title":"Kv Cache Total Gb"},"activation_gb":{"type":"number","title":"Activation Gb"},"overhead_gb":{"type":"number","title":"Overhead Gb"},"total_gb":{"type":"number","title":"Total Gb"}},"type":"object","required":["model_weights_gb","kv_cache_per_request_gb","kv_cache_total_gb","activation_gb","overhead_gb","total_gb"],"title":"MemoryBudget"},"MergePreviewBase":{"properties":{"base_id":{"type":"string","format":"uuid","title":"Base Id"},"slug":{"type":"string","title":"Slug"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"identities_count":{"type":"integer","title":"Identities Count"},"routes_count":{"type":"integer","title":"Routes Count"}},"type":"object","required":["base_id","slug","display_name","identities_count","routes_count"],"title":"MergePreviewBase","description":"Per-base diff returned by preview."},"MergePreviewResponse":{"properties":{"survivor":{"$ref":"#/components/schemas/MergePreviewBase"},"losers":{"items":{"$ref":"#/components/schemas/MergePreviewBase"},"type":"array","title":"Losers"},"identities_to_repoint":{"type":"integer","title":"Identities To Repoint"},"routes_to_repoint":{"type":"integer","title":"Routes To Repoint"},"removed_slugs":{"items":{"type":"string"},"type":"array","title":"Removed Slugs"},"identity_collisions":{"items":{"type":"string"},"type":"array","title":"Identity Collisions"}},"type":"object","required":["survivor","losers","identities_to_repoint","routes_to_repoint","removed_slugs","identity_collisions"],"title":"MergePreviewResponse","description":"What will happen if the merge runs.\n\n`removed_slugs` is the URL impact: every loser slug is hard-deleted and its\nURL 404s post-merge (no redirect, see feedback_no_redirects). Internal link\nauditing has already cleared these (see #8 internal link audit memo)."},"MessageIn":{"properties":{"role":{"type":"string","enum":["user","assistant","system"],"title":"Role"},"content":{"type":"string","maxLength":100000,"title":"Content"},"model_id":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Model Id"},"metadata_json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata Json"}},"type":"object","required":["role","content"],"title":"MessageIn"},"MessageResponse":{"properties":{"id":{"type":"string","title":"Id"},"role":{"type":"string","title":"Role"},"content":{"type":"string","title":"Content"},"model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Id"},"metadata_json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata Json"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","role","content","model_id","metadata_json","created_at"],"title":"MessageResponse"},"MetadataResponse":{"properties":{"capabilities":{"items":{"$ref":"#/components/schemas/CapabilityMetadata"},"type":"array","title":"Capabilities"},"benchmark_categories":{"items":{"$ref":"#/components/schemas/BenchmarkCategoryMetadata"},"type":"array","title":"Benchmark Categories"},"hosts":{"items":{"$ref":"#/components/schemas/HostMetadata"},"type":"array","title":"Hosts"}},"type":"object","required":["capabilities","benchmark_categories","hosts"],"title":"MetadataResponse","description":"Complete metadata response for UI configuration."},"ModelAdminCreate":{"properties":{"slug":{"type":"string","maxLength":255,"title":"Slug"},"name":{"type":"string","maxLength":255,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"provider_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Provider Id"},"release_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Release Date"},"model_type":{"type":"string","maxLength":100,"title":"Model Type"},"parameters":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Parameters"},"parameters_numeric":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Parameters Numeric"},"modalities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Modalities"},"input_modalities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Input Modalities"},"output_modalities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Output Modalities"},"context_window":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Context Window"},"max_output_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Output Tokens"},"training_data_cutoff":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Training Data Cutoff"},"capabilities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Capabilities"},"strengths":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Strengths"},"limitations":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Limitations"},"license":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"License"},"deployment_options":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Deployment Options"},"documentation_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Documentation Url"},"use_case_tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Use Case Tags"},"data_source":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Data Source"},"is_featured":{"type":"boolean","title":"Is Featured","default":false},"is_active":{"type":"boolean","title":"Is Active","default":true},"is_open_source":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Open Source"}},"type":"object","required":["slug","name","model_type"],"title":"ModelAdminCreate","description":"Schema for creating a new AI model."},"ModelAdminDetail":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"model_identity_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Model Identity Id"},"slug":{"type":"string","title":"Slug"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"provider_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Provider Id"},"provider_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Name"},"release_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Release Date"},"model_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Type"},"parameters":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parameters"},"parameters_numeric":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Parameters Numeric"},"input_modalities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Input Modalities"},"output_modalities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Output Modalities"},"context_window":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Context Window"},"max_output_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Output Tokens"},"training_data_cutoff":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Training Data Cutoff"},"capabilities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Capabilities"},"strengths":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Strengths"},"limitations":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Limitations"},"license":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"License"},"deployment_options":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Deployment Options"},"documentation_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Documentation Url"},"benchmark_scores":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Benchmark Scores"},"use_case_tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Use Case Tags"},"field_sources":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Field Sources"},"is_featured":{"type":"boolean","title":"Is Featured","default":false},"is_active":{"type":"boolean","title":"Is Active","default":true},"is_open_source":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Open Source"},"inference_available":{"type":"boolean","title":"Inference Available","default":false},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","slug","created_at","updated_at"],"title":"ModelAdminDetail","description":"Full AI model schema for admin detail view."},"ModelAdminListItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"model_identity_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Model Identity Id"},"slug":{"type":"string","title":"Slug"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"provider_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Provider Id"},"provider_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Name"},"model_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Type"},"parameters":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parameters"},"is_active":{"type":"boolean","title":"Is Active"},"is_featured":{"type":"boolean","title":"Is Featured"},"is_open_source":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Open Source"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"resolved_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Resolved At"},"field_sources":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Field Sources"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"context_window":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Context Window"},"input_modalities":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Input Modalities"},"output_modalities":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Output Modalities"},"inference_available":{"type":"boolean","title":"Inference Available","default":false},"enrichment_percent":{"type":"integer","title":"Enrichment Percent","default":0}},"type":"object","required":["id","slug","is_active","is_featured","created_at","updated_at"],"title":"ModelAdminListItem","description":"Simplified AI model schema for admin list view."},"ModelAdminUpdate":{"properties":{"slug":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Slug"},"name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"provider_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Provider Id"},"release_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Release Date"},"model_type":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Model Type"},"parameters":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Parameters"},"parameters_numeric":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Parameters Numeric"},"modalities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Modalities"},"input_modalities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Input Modalities"},"output_modalities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Output Modalities"},"context_window":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Context Window"},"max_output_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Output Tokens"},"training_data_cutoff":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Training Data Cutoff"},"capabilities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Capabilities"},"strengths":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Strengths"},"limitations":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Limitations"},"license":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"License"},"deployment_options":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Deployment Options"},"documentation_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Documentation Url"},"use_case_tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Use Case Tags"},"is_featured":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Featured"},"is_open_source":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Open Source"}},"type":"object","title":"ModelAdminUpdate","description":"Schema for updating an AI model (all fields optional)."},"ModelBenchmarksResponse":{"properties":{"model_id":{"type":"string","title":"Model Id"},"model_slug":{"type":"string","title":"Model Slug"},"model_name":{"type":"string","title":"Model Name"},"benchmarks":{"items":{"$ref":"#/components/schemas/BenchmarkScoreSimple"},"type":"array","title":"Benchmarks"},"by_category":{"additionalProperties":{"items":{"$ref":"#/components/schemas/BenchmarkScoreSimple"},"type":"array"},"type":"object","title":"By Category"}},"type":"object","required":["model_id","model_slug","model_name","benchmarks","by_category"],"title":"ModelBenchmarksResponse","description":"Response containing all benchmark scores for a model."},"ModelHealthResponse":{"properties":{"model":{"type":"string","title":"Model"},"status":{"type":"string","enum":["ready","loading","unavailable"],"title":"Status"}},"type":"object","required":["model","status"],"title":"ModelHealthResponse"},"ModelHostCreate":{"properties":{"model_id":{"type":"string","format":"uuid","title":"Model Id"},"platform_slug":{"type":"string","maxLength":100,"minLength":1,"title":"Platform Slug"},"is_creator_direct":{"type":"boolean","title":"Is Creator Direct","default":false},"source_type":{"type":"string","maxLength":100,"title":"Source Type","default":"admin_override"},"input_cost_per_1m":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Input Cost Per 1M"},"output_cost_per_1m":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Output Cost Per 1M"},"is_available":{"type":"boolean","title":"Is Available","default":true}},"type":"object","required":["model_id","platform_slug"],"title":"ModelHostCreate","description":"Create model host request"},"ModelHostDetail":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"model_id":{"type":"string","format":"uuid","title":"Model Id"},"model_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Name"},"platform_slug":{"type":"string","title":"Platform Slug"},"is_creator_direct":{"type":"boolean","title":"Is Creator Direct","default":false},"source_type":{"type":"string","title":"Source Type","default":"admin_override"},"input_cost_per_1m":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Input Cost Per 1M"},"output_cost_per_1m":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Output Cost Per 1M"},"is_available":{"type":"boolean","title":"Is Available"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","model_id","platform_slug","is_available","created_at","updated_at"],"title":"ModelHostDetail","description":"Full model host detail with all fields"},"ModelHostItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"model_id":{"type":"string","format":"uuid","title":"Model Id"},"model_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Name"},"platform_slug":{"type":"string","title":"Platform Slug"},"is_creator_direct":{"type":"boolean","title":"Is Creator Direct","default":false},"source_type":{"type":"string","title":"Source Type","default":"admin_override"},"input_cost_per_1m":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Input Cost Per 1M"},"output_cost_per_1m":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Output Cost Per 1M"},"is_available":{"type":"boolean","title":"Is Available"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","model_id","platform_slug","is_available","updated_at"],"title":"ModelHostItem","description":"Model host response item"},"ModelHostUpdate":{"properties":{"model_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Model Id"},"platform_slug":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Platform Slug"},"is_creator_direct":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Creator Direct"},"source_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Type"},"input_cost_per_1m":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Input Cost Per 1M"},"output_cost_per_1m":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Output Cost Per 1M"},"is_available":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Available"}},"type":"object","title":"ModelHostUpdate","description":"Update model host request"},"ModelHostsResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ModelHostItem"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"total_pages":{"type":"integer","title":"Total Pages"},"platforms":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Platforms"}},"type":"object","required":["items","total","page","page_size","total_pages"],"title":"ModelHostsResponse","description":"Paginated model hosts response"},"ModelOption":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"display_name":{"type":"string","title":"Display Name"},"creator":{"type":"string","title":"Creator"}},"type":"object","required":["id","display_name","creator"],"title":"ModelOption","description":"Model identity option for dropdown"},"ModelRecommendation":{"properties":{"model_id":{"type":"string","title":"Model Id","description":"Model UUID"},"model_slug":{"type":"string","title":"Model Slug","description":"Model slug for URLs"},"model_name":{"type":"string","title":"Model Name","description":"Model display name"},"creator_name":{"type":"string","title":"Creator Name","description":"Model creator (e.g., 'OpenAI')"},"creator_logo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Creator Logo","description":"Creator logo URL"},"total_score":{"type":"integer","maximum":100.0,"minimum":0.0,"title":"Total Score","description":"Overall match score (0-100)"},"use_case_match":{"type":"integer","maximum":100.0,"minimum":0.0,"title":"Use Case Match","description":"Use case fit score (70% weight)"},"priority_score":{"type":"integer","maximum":100.0,"minimum":0.0,"title":"Priority Score","description":"User priority score (25% weight)"},"capability_score":{"type":"integer","maximum":100.0,"minimum":0.0,"title":"Capability Score","description":"Capability match (0-100)"},"benchmark_score":{"type":"integer","maximum":100.0,"minimum":0.0,"title":"Benchmark Score","description":"Benchmark performance (0-100)"},"cost_score":{"type":"integer","maximum":100.0,"minimum":0.0,"title":"Cost Score","description":"Cost efficiency (0-100)"},"popularity_score":{"type":"integer","maximum":100.0,"minimum":0.0,"title":"Popularity Score","description":"Popularity/adoption (5% weight)"},"reasoning":{"type":"string","title":"Reasoning","description":"Why this model is recommended"},"strengths":{"items":{"type":"string"},"type":"array","title":"Strengths","description":"Key strengths for this use case"},"trade_offs":{"items":{"type":"string"},"type":"array","title":"Trade Offs","description":"Potential considerations"},"input_cost":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Input Cost","description":"Input cost per 1M tokens"},"output_cost":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Output Cost","description":"Output cost per 1M tokens"},"context_window":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Context Window","description":"Context window size"},"modalities":{"items":{"type":"string"},"type":"array","title":"Modalities","description":"Supported modalities"},"inference_model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inference Model Id","description":"Inference model ID (if available for playground)"}},"type":"object","required":["model_id","model_slug","model_name","creator_name","total_score","use_case_match","priority_score","capability_score","benchmark_score","cost_score","popularity_score","reasoning","strengths","trade_offs"],"title":"ModelRecommendation","description":"A recommended model with scoring details"},"ModelRequestCreate":{"properties":{"model_name":{"type":"string","maxLength":100,"minLength":1,"title":"Model Name"},"note":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Note"}},"type":"object","required":["model_name"],"title":"ModelRequestCreate","description":"A 'my model isn't in the catalog' request from the routing-preview search."},"ModelRouteCreate":{"properties":{"vendor":{"type":"string","maxLength":50,"minLength":1,"title":"Vendor"},"upstream_model_id":{"type":"string","maxLength":255,"minLength":1,"title":"Upstream Model Id"},"base_url":{"type":"string","maxLength":512,"minLength":1,"title":"Base Url"},"priority":{"anyOf":[{"type":"integer","maximum":32767.0,"minimum":0.0},{"type":"null"}],"title":"Priority","description":"Lower = preferred. Defaults to max(priority)+1 for the model."},"status":{"type":"string","enum":["active","disabled","degraded"],"title":"Status","default":"active"},"input_cost_per_1m":{"type":"number","minimum":0.0,"title":"Input Cost Per 1M","description":"Dollars per 1M input tokens","default":0.2},"output_cost_per_1m":{"type":"number","minimum":0.0,"title":"Output Cost Per 1M","description":"Dollars per 1M output tokens","default":0.6}},"type":"object","required":["vendor","upstream_model_id","base_url"],"title":"ModelRouteCreate"},"ModelRouteResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"model_id":{"type":"string","format":"uuid","title":"Model Id"},"identity_id":{"type":"string","format":"uuid","title":"Identity Id"},"vendor":{"type":"string","title":"Vendor"},"upstream_model_id":{"type":"string","title":"Upstream Model Id"},"base_url":{"type":"string","title":"Base Url"},"priority":{"type":"integer","title":"Priority"},"status":{"type":"string","enum":["active","disabled","degraded"],"title":"Status"},"input_cost_per_1m":{"type":"number","title":"Input Cost Per 1M"},"output_cost_per_1m":{"type":"number","title":"Output Cost Per 1M"},"consecutive_failures":{"type":"integer","title":"Consecutive Failures"},"health_last_checked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Health Last Checked At"},"health_last_status_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Health Last Status Code"},"variant_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant Label"},"variant_kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant Kind"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","model_id","identity_id","vendor","upstream_model_id","base_url","priority","status","input_cost_per_1m","output_cost_per_1m","consecutive_failures","health_last_checked_at","health_last_status_code","created_at","updated_at"],"title":"ModelRouteResponse"},"ModelRouteUpdate":{"properties":{"vendor":{"anyOf":[{"type":"string","maxLength":50,"minLength":1},{"type":"null"}],"title":"Vendor"},"upstream_model_id":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Upstream Model Id"},"base_url":{"anyOf":[{"type":"string","maxLength":512,"minLength":1},{"type":"null"}],"title":"Base Url"},"priority":{"anyOf":[{"type":"integer","maximum":32767.0,"minimum":0.0},{"type":"null"}],"title":"Priority"},"status":{"anyOf":[{"type":"string","enum":["active","disabled","degraded"]},{"type":"null"}],"title":"Status"},"input_cost_per_1m":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Input Cost Per 1M"},"output_cost_per_1m":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Output Cost Per 1M"}},"type":"object","title":"ModelRouteUpdate"},"ModelScore":{"properties":{"slug":{"type":"string","title":"Slug","description":"Model slug"},"name":{"type":"string","title":"Name","description":"Model display name"},"value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Value","description":"Raw numeric value"},"formatted":{"type":"string","title":"Formatted","description":"Display string: '$2.50/1M', '128K tokens'"},"rank":{"type":"integer","title":"Rank","description":"Rank (1 = best)"}},"type":"object","required":["slug","name","formatted","rank"],"title":"ModelScore","description":"A model's value/rank on a single metric"},"ModelUsageStat":{"properties":{"model":{"type":"string","title":"Model"},"requests":{"type":"integer","title":"Requests"},"total_tokens":{"type":"integer","title":"Total Tokens"},"cost_cents":{"type":"integer","title":"Cost Cents"},"avg_latency_ms":{"type":"integer","title":"Avg Latency Ms"}},"type":"object","required":["model","requests","total_tokens","cost_cents","avg_latency_ms"],"title":"ModelUsageStat"},"ModelVisibilityUpdate":{"properties":{"admin_visibility_override":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Admin Visibility Override"}},"type":"object","required":["admin_visibility_override"],"title":"ModelVisibilityUpdate"},"NewsletterResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"},"already_subscribed":{"type":"boolean","title":"Already Subscribed","default":false}},"type":"object","required":["success","message"],"title":"NewsletterResponse","description":"Response after newsletter signup"},"NewsletterSignupRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"source":{"$ref":"#/components/schemas/LeadSourceEnum","default":"newsletter"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"}},"additionalProperties":false,"type":"object","required":["email"],"title":"NewsletterSignupRequest","description":"Schema for newsletter signup (simplified lead)"},"OnboardingCompleteRequest":{"properties":{"role":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Role"},"building":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Building"},"interests":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Interests"},"other_interest":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Other Interest"}},"additionalProperties":false,"type":"object","title":"OnboardingCompleteRequest","description":"Schema for completing onboarding"},"OnboardingCompleteResponse":{"properties":{"message":{"type":"string","title":"Message"},"onboarding_completed_at":{"type":"string","format":"date-time","title":"Onboarding Completed At"}},"type":"object","required":["message","onboarding_completed_at"],"title":"OnboardingCompleteResponse","description":"Schema for onboarding completion response"},"PaginatedResponse":{"properties":{"items":{"items":{},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"has_more":{"type":"boolean","title":"Has More"}},"type":"object","required":["items","total","page","page_size","has_more"],"title":"PaginatedResponse","description":"Generic paginated response."},"PaginatedResponse_ActivityLogItem_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ActivityLogItem"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"total_pages":{"type":"integer","title":"Total Pages"}},"type":"object","required":["items","total","page","page_size","total_pages"],"title":"PaginatedResponse[ActivityLogItem]"},"PaginatedResponse_ModelAdminListItem_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ModelAdminListItem"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"total_pages":{"type":"integer","title":"Total Pages"}},"type":"object","required":["items","total","page","page_size","total_pages"],"title":"PaginatedResponse[ModelAdminListItem]"},"PaginatedResponse_UserAdminListItem_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/UserAdminListItem"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"total_pages":{"type":"integer","title":"Total Pages"}},"type":"object","required":["items","total","page","page_size","total_pages"],"title":"PaginatedResponse[UserAdminListItem]"},"ParallelismPlan":{"properties":{"tensor_parallelism":{"type":"integer","title":"Tensor Parallelism"},"pipeline_parallelism":{"type":"integer","title":"Pipeline Parallelism"},"data_parallelism":{"type":"integer","title":"Data Parallelism"},"total_gpus":{"type":"integer","title":"Total Gpus"},"strategy":{"type":"string","enum":["single","tensor_parallel","pipeline_parallel","tensor_parallel_with_dp"],"title":"Strategy"},"interconnect_required":{"type":"boolean","title":"Interconnect Required"}},"type":"object","required":["tensor_parallelism","pipeline_parallelism","data_parallelism","total_gpus","strategy","interconnect_required"],"title":"ParallelismPlan"},"PasswordChangeRequest":{"properties":{"current_password":{"type":"string","minLength":1,"title":"Current Password"},"new_password":{"type":"string","maxLength":128,"minLength":8,"title":"New Password"}},"additionalProperties":false,"type":"object","required":["current_password","new_password"],"title":"PasswordChangeRequest","description":"Schema for password change request"},"PasswordReset":{"properties":{"token":{"type":"string","title":"Token","description":"Password reset token"},"new_password":{"type":"string","maxLength":100,"minLength":8,"title":"New Password","description":"New password (minimum 8 characters)"}},"type":"object","required":["token","new_password"],"title":"PasswordReset","description":"Schema for password reset with token"},"PasswordResetRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email","description":"User email address"}},"type":"object","required":["email"],"title":"PasswordResetRequest","description":"Schema for password reset request"},"PingResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message","default":""},"status_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Status Code"},"latency_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Latency Ms"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["success"],"title":"PingResponse"},"PlatformDetailResponse":{"properties":{"overview":{"$ref":"#/components/schemas/PlatformOverview"},"recent_probes":{"items":{"$ref":"#/components/schemas/ProbeHistoryItem"},"type":"array","title":"Recent Probes"}},"type":"object","required":["overview","recent_probes"],"title":"PlatformDetailResponse"},"PlatformOverview":{"properties":{"vendor":{"type":"string","title":"Vendor"},"display_name":{"type":"string","title":"Display Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"api_base_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Base Url"},"can_bootstrap":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Can Bootstrap"},"api_key_env":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key Env"},"configured":{"type":"boolean","title":"Configured"},"active_routes":{"type":"integer","title":"Active Routes"},"last_check_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Check At"},"last_ok":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Last Ok"},"last_status_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Status Code"},"last_latency_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Latency Ms"},"last_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Error"}},"type":"object","required":["vendor","display_name","description","api_base_url","can_bootstrap","api_key_env","configured","active_routes","last_check_at","last_ok","last_status_code","last_latency_ms","last_error"],"title":"PlatformOverview","description":"Everything the Overview tab on /admin/inference/platforms/[vendor] needs."},"PlatformUsageResponse":{"properties":{"vendor":{"type":"string","title":"Vendor"},"window_hours":{"type":"integer","title":"Window Hours"},"total_requests":{"type":"integer","title":"Total Requests"},"total_tokens":{"type":"integer","title":"Total Tokens"},"total_cost_cents":{"type":"integer","title":"Total Cost Cents"},"avg_latency_ms":{"type":"integer","title":"Avg Latency Ms"},"error_count":{"type":"integer","title":"Error Count"},"unique_users":{"type":"integer","title":"Unique Users"},"top_models":{"items":{"$ref":"#/components/schemas/PlatformUsageTopModel"},"type":"array","title":"Top Models"}},"type":"object","required":["vendor","window_hours","total_requests","total_tokens","total_cost_cents","avg_latency_ms","error_count","unique_users","top_models"],"title":"PlatformUsageResponse"},"PlatformUsageTopModel":{"properties":{"model":{"type":"string","title":"Model"},"requests":{"type":"integer","title":"Requests"},"total_tokens":{"type":"integer","title":"Total Tokens"},"cost_cents":{"type":"integer","title":"Cost Cents"},"avg_latency_ms":{"type":"integer","title":"Avg Latency Ms"}},"type":"object","required":["model","requests","total_tokens","cost_cents","avg_latency_ms"],"title":"PlatformUsageTopModel"},"PreviewItem":{"properties":{"id":{"type":"string","title":"Id"},"slug":{"type":"string","title":"Slug"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"creator":{"type":"string","title":"Creator"}},"type":"object","required":["id","slug","display_name","creator"],"title":"PreviewItem"},"PreviewResponse":{"properties":{"total":{"type":"integer","title":"Total"},"items":{"items":{"$ref":"#/components/schemas/PreviewItem"},"type":"array","title":"Items"}},"type":"object","required":["total","items"],"title":"PreviewResponse"},"ProbeHistoryItem":{"properties":{"checked_at":{"type":"string","format":"date-time","title":"Checked At"},"ok":{"type":"boolean","title":"Ok"},"status_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Status Code"},"latency_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Latency Ms"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"}},"type":"object","required":["checked_at","ok","status_code","latency_ms","error_message"],"title":"ProbeHistoryItem"},"ProbeNowResponse":{"properties":{"vendor":{"type":"string","title":"Vendor"},"ok":{"type":"boolean","title":"Ok"},"status_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Status Code"},"latency_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Latency Ms"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["vendor","ok","status_code","latency_ms","error"],"title":"ProbeNowResponse"},"ProviderResponse":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"name":{"type":"string","title":"Name"},"slug":{"type":"string","title":"Slug"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"official_website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Official Website"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"}},"type":"object","required":["name","slug"],"title":"ProviderResponse","description":"Schema for provider/creator information"},"RangeEstimate":{"properties":{"min":{"type":"number","title":"Min"},"expected":{"type":"number","title":"Expected"},"max":{"type":"number","title":"Max"}},"type":"object","required":["min","expected","max"],"title":"RangeEstimate"},"RangeOption":{"properties":{"min":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min"},"max":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max"}},"type":"object","title":"RangeOption","description":"Min/max range for numeric filters"},"Ranking":{"properties":{"metric":{"type":"string","title":"Metric","description":"Metric identifier: 'context_window', 'max_output'"},"label":{"type":"string","title":"Label","description":"Human-readable label: 'Input Cost'"},"higher_is_better":{"type":"boolean","title":"Higher Is Better","description":"True for benchmarks, False for costs"},"scores":{"items":{"$ref":"#/components/schemas/ModelScore"},"type":"array","title":"Scores","description":"Models ordered by rank (best first)"}},"type":"object","required":["metric","label","higher_is_better","scores"],"title":"Ranking","description":"All models ranked on one metric"},"RawSnapshotDetail":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"api_source_slug":{"type":"string","title":"Api Source Slug"},"source_model_id":{"type":"string","title":"Source Model Id"},"payload_hash":{"type":"string","title":"Payload Hash"},"payload":{"additionalProperties":true,"type":"object","title":"Payload"},"fetched_at":{"type":"string","format":"date-time","title":"Fetched At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","api_source_slug","source_model_id","payload_hash","payload","fetched_at","created_at"],"title":"RawSnapshotDetail","description":"Full raw snapshot with payload."},"ReassignBaseRequest":{"properties":{"new_base_id":{"type":"string","format":"uuid","title":"New Base Id"},"variant_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant Label"},"variant_kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant Kind"}},"type":"object","required":["new_base_id"],"title":"ReassignBaseRequest"},"RecentActivity":{"properties":{"id":{"type":"integer","title":"Id"},"action":{"type":"string","title":"Action"},"resource_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resource Type"},"resource_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Resource Id"},"extra_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Extra Data"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","action","created_at"],"title":"RecentActivity","description":"Schema for recent activity item"},"RegistryReloadResponse":{"properties":{"models":{"items":{"type":"string"},"type":"array","title":"Models"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["models","count"],"title":"RegistryReloadResponse"},"ResolveErrorResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"resolved_at":{"type":"string","format":"date-time","title":"Resolved At"},"resolved_by":{"type":"string","title":"Resolved By"}},"type":"object","required":["id","resolved_at","resolved_by"],"title":"ResolveErrorResponse"},"ResourceAccess":{"properties":{"used":{"type":"integer","title":"Used"},"limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit"}},"type":"object","required":["used","limit"],"title":"ResourceAccess"},"ResourceUsage":{"properties":{"used":{"type":"integer","title":"Used"},"limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit"}},"type":"object","required":["used","limit"],"title":"ResourceUsage"},"RetryErrorsResponse":{"properties":{"api_source_slug":{"type":"string","title":"Api Source Slug"},"errors_before":{"type":"integer","title":"Errors Before"},"run_id":{"type":"string","format":"uuid","title":"Run Id"},"succeeded":{"type":"integer","title":"Succeeded"},"failed":{"type":"integer","title":"Failed"},"resolved":{"type":"integer","title":"Resolved"},"remaining_unresolved":{"type":"integer","title":"Remaining Unresolved"}},"type":"object","required":["api_source_slug","errors_before","run_id","succeeded","failed","resolved","remaining_unresolved"],"title":"RetryErrorsResponse"},"ReviewQueueItem":{"properties":{"ingestion_error_id":{"type":"string","format":"uuid","title":"Ingestion Error Id"},"api_source":{"type":"string","title":"Api Source"},"source_model_id":{"type":"string","title":"Source Model Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"error_detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Detail"},"suggested_base_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Suggested Base Id"},"suggested_base_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Suggested Base Slug"},"pending_identity_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Pending Identity Id"}},"type":"object","required":["ingestion_error_id","api_source","source_model_id","created_at","error_detail"],"title":"ReviewQueueItem","description":"One pending ingest waiting for admin action.\n\nThe auto-suggestion fields are populated when the stripped slug\nmatches an existing base — the admin can click 'link to this base'\nand move on. When suggestion is None the admin either picks a base\nmanually or creates a new one via /admin/identities/{id}/create-base."},"ReviewQueueResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ReviewQueueItem"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"ReviewQueueResponse"},"RouteHealthItem":{"properties":{"route_id":{"type":"string","format":"uuid","title":"Route Id"},"model_id":{"type":"string","format":"uuid","title":"Model Id"},"model_slug":{"type":"string","title":"Model Slug"},"model_display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Display Name"},"vendor":{"type":"string","title":"Vendor"},"upstream_model_id":{"type":"string","title":"Upstream Model Id"},"priority":{"type":"integer","title":"Priority"},"status":{"type":"string","title":"Status"},"consecutive_failures":{"type":"integer","title":"Consecutive Failures"},"health_last_checked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Health Last Checked At"},"health_last_status_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Health Last Status Code"}},"type":"object","required":["route_id","model_id","model_slug","model_display_name","vendor","upstream_model_id","priority","status","consecutive_failures","health_last_checked_at","health_last_status_code"],"title":"RouteHealthItem","description":"One row in the per-route health table on the Health admin tab."},"RouteHealthResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/RouteHealthItem"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"RouteHealthResponse"},"RouteSuggestion":{"properties":{"vendor":{"type":"string","title":"Vendor"},"upstream_model_id":{"type":"string","title":"Upstream Model Id"},"base_url":{"type":"string","title":"Base Url"},"input_cost_per_1m":{"type":"integer","title":"Input Cost Per 1M"},"output_cost_per_1m":{"type":"integer","title":"Output Cost Per 1M"}},"type":"object","required":["vendor","upstream_model_id","base_url","input_cost_per_1m","output_cost_per_1m"],"title":"RouteSuggestion"},"RoutingDecisionView":{"properties":{"request_id":{"type":"string","title":"Request Id"},"routing_mode":{"type":"string","title":"Routing Mode"},"preset":{"type":"string","title":"Preset"},"classifier_task_family":{"type":"string","title":"Classifier Task Family"},"classifier_complexity":{"type":"number","title":"Classifier Complexity"},"classifier_status":{"type":"string","title":"Classifier Status"},"eligibility_pool_size":{"type":"integer","title":"Eligibility Pool Size"},"primary_route_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Primary Route Id"},"final_disposition":{"type":"string","title":"Final Disposition"},"routing_confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Routing Confidence"},"latency_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Latency Ms"},"ttft_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ttft Ms"},"cost_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cost Usd"},"chain_attempted":{"items":{"type":"string"},"type":"array","title":"Chain Attempted"},"attempt_outcomes":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Attempt Outcomes"},"f2_floor_drops":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"F2 Floor Drops"},"user_rules_applied":{"additionalProperties":true,"type":"object","title":"User Rules Applied"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["request_id","routing_mode","preset","classifier_task_family","classifier_complexity","classifier_status","eligibility_pool_size","primary_route_id","final_disposition","routing_confidence","latency_ms","ttft_ms","cost_usd","chain_attempted","attempt_outcomes","f2_floor_drops","user_rules_applied","created_at"],"title":"RoutingDecisionView","description":"The M1 routing decision record surfaced via D15."},"RoutingParams":{"properties":{"task":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Task","description":"Task type: chat, code-generation, summarization, etc."},"optimize":{"type":"string","enum":["cost","quality","latency","balanced"],"title":"Optimize","default":"balanced"},"preset":{"anyOf":[{"type":"string","enum":["strict","standard","permissive"]},{"type":"null"}],"title":"Preset","description":"Eligibility preset for Auto routing; overrides the key default. None = key default (Standard)."},"max_cost_per_1m_tokens":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Cost Per 1M Tokens","description":"Max cost per 1M input tokens in USD"},"min_context_window":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Context Window","description":"Minimum context window size"},"model_pool":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Model Pool","description":"Restrict routing to these model IDs"}},"type":"object","title":"RoutingParams"},"SavedComparison":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"name":{"type":"string","title":"Name"},"model_slugs":{"items":{"type":"string"},"type":"array","title":"Model Slugs"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"source":{"type":"string","title":"Source","default":"compare"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","user_id","name","model_slugs","created_at","updated_at"],"title":"SavedComparison","description":"Schema for saved comparison response"},"SavedComparisonsList":{"properties":{"items":{"items":{"$ref":"#/components/schemas/SavedComparison"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"total_pages":{"type":"integer","title":"Total Pages"}},"type":"object","required":["items","total","page","page_size","total_pages"],"title":"SavedComparisonsList","description":"Paginated list of saved comparisons"},"ScrapeRequest":{"properties":{"url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Url"},"wait_for_selector":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Wait For Selector","description":"CSS selector to wait for before extracting content"},"timeout_ms":{"type":"integer","maximum":120000.0,"minimum":5000.0,"title":"Timeout Ms","description":"Page load timeout in milliseconds","default":30000},"expand_selectors":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Expand Selectors","description":"CSS selectors or text patterns to click for expanding content. Use 'text=...' for text matching (e.g., 'text=Expand to learn more')"},"click_tabs":{"type":"boolean","title":"Click Tabs","description":"If true, iterate through all tabs and aggregate content from each","default":false},"tab_selector":{"type":"string","title":"Tab Selector","description":"CSS selector for tab elements","default":"[role=\"tab\"]"},"skip_tab_texts":{"items":{"type":"string"},"type":"array","title":"Skip Tab Texts","description":"Tab texts to skip (like 'More' which shows additional tabs)","default":["More"]}},"type":"object","required":["url"],"title":"ScrapeRequest","description":"Request to scrape a URL"},"ScrapeResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"url":{"type":"string","title":"Url"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"text_content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text Content"},"text_length":{"type":"integer","title":"Text Length","default":0},"scrape_time_ms":{"type":"integer","title":"Scrape Time Ms","default":0},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"expands_clicked":{"type":"integer","title":"Expands Clicked","default":0},"tabs_clicked":{"type":"integer","title":"Tabs Clicked","default":0},"tab_names":{"items":{"type":"string"},"type":"array","title":"Tab Names","default":[]}},"type":"object","required":["success","url"],"title":"ScrapeResponse","description":"Response from scraping - raw content only"},"ShadowBaselineModelView":{"properties":{"base_id":{"type":"string","format":"uuid","title":"Base Id"},"slug":{"type":"string","title":"Slug"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"creator":{"type":"string","title":"Creator"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"blended_cost_per_1m":{"type":"number","title":"Blended Cost Per 1M"}},"type":"object","required":["base_id","slug","display_name","creator","logo_url","blended_cost_per_1m"],"title":"ShadowBaselineModelView","description":"A catalog model a customer can pick as their current model (baseline)."},"ShadowBatchDetailView":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"sample_count":{"type":"integer","title":"Sample Count"},"status":{"type":"string","title":"Status"},"path3_state":{"type":"string","title":"Path3 State"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"summary":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Summary"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["id","label","sample_count","status","path3_state","created_at","completed_at","summary","error"],"title":"ShadowBatchDetailView","description":"A batch plus its computed report (detail view).\n\n`summary` is the routing-preview report: workload `totals` (prompt/routed\ncounts + savings_fraction + estimated costs) and per-prompt routed picks keyed\nby sample id (None until processing completes). The detail endpoint joins a\ntruncated `prompt_preview` onto each per-prompt row from the live samples.\n`error` is set only on a failed batch."},"ShadowBatchSummaryView":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"sample_count":{"type":"integer","title":"Sample Count"},"status":{"type":"string","title":"Status"},"path3_state":{"type":"string","title":"Path3 State"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"}},"type":"object","required":["id","label","sample_count","status","path3_state","created_at","completed_at"],"title":"ShadowBatchSummaryView","description":"A batch's identity + processing status (list view)."},"ShadowUploadRequest":{"properties":{"label":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Label"},"rows":{"items":{"$ref":"#/components/schemas/ShadowUploadRow"},"type":"array","maxItems":1000,"minItems":1,"title":"Rows"},"pool_filter":{"type":"string","enum":["mixed","open","closed"],"title":"Pool Filter","default":"mixed"}},"type":"object","required":["rows"],"title":"ShadowUploadRequest","description":"A batch of prompts to replay against the catalog."},"ShadowUploadRow":{"properties":{"prompt":{"type":"string","maxLength":24000,"minLength":1,"title":"Prompt"},"model_used":{"type":"string","maxLength":100,"minLength":1,"title":"Model Used","description":"The model the customer currently uses"},"response":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Response","description":"The customer's historical response, if available"}},"type":"object","required":["prompt","model_used"],"title":"ShadowUploadRow","description":"One uploaded prompt + the model the customer used for it."},"SizingRequest":{"properties":{"param_count":{"type":"number","maximum":2000000000000.0,"minimum":100000000.0,"title":"Param Count","description":"Total parameters (e.g., 70_000_000_000 for 70B)"},"active_param_count":{"anyOf":[{"type":"number","maximum":2000000000000.0,"minimum":100000000.0},{"type":"null"}],"title":"Active Param Count","description":"Active parameters per token for Mixture-of-Experts models (e.g., 17_000_000_000 for Llama 4 Scout's 17B active out of 109B total). When omitted or >= param_count, the model is treated as dense and total = active."},"quantization":{"type":"string","enum":["fp32","fp16","fp8","int8","int4"],"title":"Quantization","description":"Model weight precision","default":"fp16"},"context_length":{"type":"integer","maximum":2000000.0,"minimum":512.0,"title":"Context Length","description":"Maximum sequence length"},"workload":{"$ref":"#/components/schemas/WorkloadConfig"},"use_case":{"type":"string","enum":["inference","batch","lora_tuning","full_tuning","embeddings"],"title":"Use Case","default":"inference"},"framework":{"type":"string","enum":["vllm","tgi","tensorrt_llm","sglang","ollama","transformers","unsloth","axolotl"],"title":"Framework","default":"vllm"},"kv_cache_strategy":{"type":"string","enum":["standard","paged_attention","prefix_caching"],"title":"Kv Cache Strategy","default":"paged_attention"},"kv_cache_precision":{"type":"string","enum":["fp16","fp8","int8"],"title":"Kv Cache Precision","default":"fp16"},"multi_model_serving":{"type":"boolean","title":"Multi Model Serving","default":false},"parallelism_mode":{"type":"string","enum":["auto","tp_only","pp_only","tp_dp"],"title":"Parallelism Mode","default":"auto"},"deployment_target":{"type":"string","enum":["cloud","on_prem"],"title":"Deployment Target","default":"cloud"},"cloud_providers":{"items":{"type":"string","enum":["any","lambda","runpod","coreweave","aws","gcp"]},"type":"array","title":"Cloud Providers"},"budget_per_month":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Budget Per Month","description":"Optional monthly budget filter"},"spot_preference":{"type":"boolean","title":"Spot Preference","default":false},"availability_target":{"type":"string","enum":["single","ha","rolling"],"title":"Availability Target","default":"single"},"gpu_slugs":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Gpu Slugs","description":"Optional list of GPU slugs to consider. If omitted, all active datacenter GPUs are evaluated."}},"additionalProperties":false,"type":"object","required":["param_count","context_length","workload"],"title":"SizingRequest","description":"Inputs to a GPU sizing calculation."},"SizingResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/SizingResultItem"},"type":"array","title":"Results"},"metadata":{"$ref":"#/components/schemas/EngineMetadata"}},"type":"object","required":["results","metadata"],"title":"SizingResponse","description":"Ranked list of viable GPU configurations for the requested workload."},"SizingResultItem":{"properties":{"gpu":{"$ref":"#/components/schemas/GPUSummary"},"parallelism":{"$ref":"#/components/schemas/ParallelismPlan"},"memory":{"$ref":"#/components/schemas/MemoryBudget"},"throughput":{"$ref":"#/components/schemas/ThroughputEstimate"},"latency":{"$ref":"#/components/schemas/LatencyEstimate"},"batching":{"$ref":"#/components/schemas/BatchingAnalysis"},"cost":{"$ref":"#/components/schemas/CostEstimate"},"score":{"type":"number","title":"Score","description":"VRAM utilization fraction; higher is better-fit"},"is_recommended":{"type":"boolean","title":"Is Recommended"},"meets_latency_target":{"type":"boolean","title":"Meets Latency Target"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings"},"reasoning":{"items":{"type":"string"},"type":"array","title":"Reasoning","description":"Human-readable factors that placed this configuration in its rank position."}},"type":"object","required":["gpu","parallelism","memory","throughput","latency","batching","cost","score","is_recommended","meets_latency_target","warnings"],"title":"SizingResultItem","description":"A single ranked GPU configuration that satisfies the sizing request."},"SourceRegistryCreate":{"properties":{"api_source":{"type":"string","maxLength":100,"minLength":1,"title":"Api Source"},"display_name":{"type":"string","minLength":1,"title":"Display Name"},"can_bootstrap":{"type":"boolean","title":"Can Bootstrap","default":false},"trust_level":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Trust Level","default":0.8},"model_id_field":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Id Field"},"api_base_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Base Url"},"api_endpoint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Endpoint","default":"/models"},"auth_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth Type","default":"api_key"},"auth_key_env":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth Key Env"},"auth_location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth Location"},"auth_param_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth Param Name"},"auth_prefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth Prefix"},"response_models_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Response Models Path","default":"data"}},"type":"object","required":["api_source","display_name"],"title":"SourceRegistryCreate"},"SourceRegistryItem":{"properties":{"api_source":{"type":"string","title":"Api Source"},"display_name":{"type":"string","title":"Display Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"can_bootstrap":{"type":"boolean","title":"Can Bootstrap"},"default_host_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Host Slug"},"default_creator_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Creator Slug"},"trust_level":{"type":"number","title":"Trust Level"},"is_active":{"type":"boolean","title":"Is Active"},"model_id_field":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Id Field"},"skip_patterns":{"anyOf":[{},{"type":"null"}],"title":"Skip Patterns"},"api_base_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Base Url"},"api_endpoint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Endpoint"},"auth_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth Type"},"auth_key_env":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth Key Env"},"auth_location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth Location"},"auth_param_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth Param Name"},"auth_prefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth Prefix"},"request_headers":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Request Headers"},"request_params":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Request Params"},"request_timeout":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Request Timeout"},"pagination_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pagination Type"},"pagination_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Pagination Config"},"response_models_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Response Models Path"},"rate_limit_per_second":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rate Limit Per Second"},"last_ping_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Ping At"},"last_ping_status":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Ping Status"},"last_ping_latency_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Ping Latency Ms"},"last_sync_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Sync At"},"last_sync_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Sync Count"},"last_sync_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Sync Error"},"can_sync":{"type":"boolean","title":"Can Sync","default":false}},"type":"object","required":["api_source","display_name","can_bootstrap","trust_level","is_active"],"title":"SourceRegistryItem"},"SourceRegistryUpdate":{"properties":{"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"can_bootstrap":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Can Bootstrap"},"default_host_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Host Slug"},"default_creator_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Creator Slug"},"trust_level":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Trust Level"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"model_id_field":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Id Field"},"skip_patterns":{"anyOf":[{},{"type":"null"}],"title":"Skip Patterns"},"api_base_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Base Url"},"api_endpoint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Endpoint"},"auth_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth Type"},"auth_key_env":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth Key Env"},"auth_location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth Location"},"auth_param_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth Param Name"},"auth_prefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth Prefix"},"request_headers":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Request Headers"},"request_params":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Request Params"},"request_timeout":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Request Timeout"},"pagination_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pagination Type"},"pagination_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Pagination Config"},"response_models_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Response Models Path"},"rate_limit_per_second":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rate Limit Per Second"}},"additionalProperties":false,"type":"object","title":"SourceRegistryUpdate"},"SyncResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message","default":""},"api_source":{"type":"string","title":"Api Source","default":""},"records_fetched":{"type":"integer","title":"Records Fetched","default":0},"records_new":{"type":"integer","title":"Records New","default":0},"records_unchanged":{"type":"integer","title":"Records Unchanged","default":0},"records_stored":{"type":"integer","title":"Records Stored","default":0},"next_action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Action"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["success"],"title":"SyncResponse"},"TagRunResponse":{"properties":{"requested":{"type":"integer","title":"Requested"},"tagged":{"type":"integer","title":"Tagged"},"failed":{"type":"integer","title":"Failed"},"skipped":{"type":"integer","title":"Skipped"},"dry_run":{"type":"boolean","title":"Dry Run"},"sample":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Sample"},"errors":{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array","title":"Errors"}},"type":"object","required":["requested","tagged","failed","skipped","dry_run","sample","errors"],"title":"TagRunResponse"},"ThroughputEstimate":{"properties":{"decode_tokens_per_sec":{"$ref":"#/components/schemas/RangeEstimate"},"prefill_tokens_per_sec":{"$ref":"#/components/schemas/RangeEstimate"},"effective_rps":{"$ref":"#/components/schemas/RangeEstimate"}},"type":"object","required":["decode_tokens_per_sec","prefill_tokens_per_sec","effective_rps"],"title":"ThroughputEstimate"},"TierDistribution":{"properties":{"free":{"type":"integer","title":"Free","default":0},"pro":{"type":"integer","title":"Pro","default":0},"enterprise":{"type":"integer","title":"Enterprise","default":0}},"type":"object","title":"TierDistribution","description":"User count per subscription tier."},"ToggleAdminRequest":{"properties":{"is_admin":{"type":"boolean","title":"Is Admin","description":"Whether user should be admin"}},"type":"object","required":["is_admin"],"title":"ToggleAdminRequest","description":"Request schema for toggling admin status."},"TokenRefresh":{"properties":{"refresh_token":{"type":"string","title":"Refresh Token","description":"JWT refresh token"}},"type":"object","required":["refresh_token"],"title":"TokenRefresh","description":"Schema for token refresh request"},"UnconfirmedListResponse":{"properties":{"total":{"type":"integer","title":"Total"},"by_category":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Category"},"models":{"items":{"$ref":"#/components/schemas/UnconfirmedModelResponse"},"type":"array","title":"Models"}},"type":"object","required":["total","by_category","models"],"title":"UnconfirmedListResponse"},"UnconfirmedModelResponse":{"properties":{"model_id":{"type":"string","format":"uuid","title":"Model Id"},"slug":{"type":"string","title":"Slug"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"creator":{"type":"string","title":"Creator"},"source_types":{"items":{"type":"string"},"type":"array","title":"Source Types"},"category":{"type":"string","title":"Category"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"}},"type":"object","required":["model_id","slug","name","creator","source_types","category","created_at","updated_at"],"title":"UnconfirmedModelResponse"},"UpdateApiKeyRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Name"},"model_pool":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Model Pool"},"optimize_mode":{"anyOf":[{"type":"string","enum":["balanced","quality","cost","latency"]},{"type":"null"}],"title":"Optimize Mode"},"preset":{"anyOf":[{"type":"string","enum":["strict","standard","permissive"]},{"type":"null"}],"title":"Preset"}},"type":"object","title":"UpdateApiKeyRequest"},"UpdateConfigRequest":{"properties":{"value":{"items":{},"type":"array","title":"Value"}},"type":"object","required":["value"],"title":"UpdateConfigRequest"},"UpdateConversationRequest":{"properties":{"title":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Title"},"model_config_json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Model Config Json"}},"type":"object","title":"UpdateConversationRequest"},"UpdateSavedComparisonRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"model_slugs":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":10,"minItems":2},{"type":"null"}],"title":"Model Slugs"},"notes":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Notes"},"source":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Source"}},"additionalProperties":false,"type":"object","title":"UpdateSavedComparisonRequest","description":"Schema for updating a saved comparison"},"UpdateVariantRequest":{"properties":{"variant_label":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Variant Label"},"variant_kind":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Variant Kind"}},"type":"object","title":"UpdateVariantRequest"},"UploadResponse":{"properties":{"filename":{"type":"string","title":"Filename"},"url":{"type":"string","title":"Url"},"content_type":{"type":"string","title":"Content Type"},"size":{"type":"integer","title":"Size"}},"type":"object","required":["filename","url","content_type","size"],"title":"UploadResponse","description":"Response from file upload"},"UsageLogAdminItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"user_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Email"},"model":{"type":"string","title":"Model"},"backend":{"type":"string","title":"Backend"},"status":{"type":"string","title":"Status"},"prompt_tokens":{"type":"integer","title":"Prompt Tokens"},"completion_tokens":{"type":"integer","title":"Completion Tokens"},"total_tokens":{"type":"integer","title":"Total Tokens"},"cost_cents":{"type":"integer","title":"Cost Cents"},"latency_ms":{"type":"integer","title":"Latency Ms"},"ttft_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ttft Ms"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"was_auto_routed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Was Auto Routed"},"request_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Source"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","user_id","model","backend","status","prompt_tokens","completion_tokens","total_tokens","cost_cents","latency_ms","ttft_ms","error_message","was_auto_routed","request_source","created_at"],"title":"UsageLogAdminItem"},"UsageLogResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"api_key_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Api Key Id"},"model":{"type":"string","title":"Model"},"backend":{"type":"string","title":"Backend"},"streamed":{"type":"boolean","title":"Streamed"},"prompt_tokens":{"type":"integer","title":"Prompt Tokens"},"completion_tokens":{"type":"integer","title":"Completion Tokens"},"total_tokens":{"type":"integer","title":"Total Tokens"},"cost_cents":{"type":"integer","title":"Cost Cents"},"latency_ms":{"type":"integer","title":"Latency Ms"},"ttft_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ttft Ms"},"status":{"type":"string","title":"Status"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"was_auto_routed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Was Auto Routed"},"user_rating":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"User Rating"},"feedback_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Feedback At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","api_key_id","model","backend","streamed","prompt_tokens","completion_tokens","total_tokens","cost_cents","latency_ms","ttft_ms","status","error_message","was_auto_routed","user_rating","feedback_at","created_at"],"title":"UsageLogResponse"},"UsageLogsAdminResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/UsageLogAdminItem"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"UsageLogsAdminResponse"},"UsageStats":{"properties":{"total_favorites":{"type":"integer","title":"Total Favorites"},"total_comparisons":{"type":"integer","title":"Total Comparisons"},"total_model_views":{"type":"integer","title":"Total Model Views"},"recent_activity":{"items":{"$ref":"#/components/schemas/RecentActivity"},"type":"array","title":"Recent Activity"},"member_since":{"type":"string","format":"date-time","title":"Member Since"},"last_login":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Login"}},"type":"object","required":["total_favorites","total_comparisons","total_model_views","recent_activity","member_since"],"title":"UsageStats","description":"Schema for user usage statistics"},"UserActivityAdminResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ActivityLogItem"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"total_pages":{"type":"integer","title":"Total Pages"}},"type":"object","required":["items","total","page","page_size","total_pages"],"title":"UserActivityAdminResponse","description":"Paginated list of user activity for admin view."},"UserAdminCreate":{"properties":{"email":{"type":"string","maxLength":255,"title":"Email","description":"User email address"},"password":{"type":"string","minLength":8,"title":"Password","description":"Initial password"},"full_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Full Name"},"company":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Company"},"role":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Role"},"tier":{"type":"string","enum":["free","pro","enterprise"],"title":"Tier","description":"User subscription tier","default":"free"},"is_verified":{"type":"boolean","title":"Is Verified","description":"Mark as verified (skip email verification)","default":true},"is_active":{"type":"boolean","title":"Is Active","description":"Account active status","default":true},"is_admin":{"type":"boolean","title":"Is Admin","description":"Grant admin privileges","default":false}},"type":"object","required":["email","password"],"title":"UserAdminCreate","description":"Schema for admin creating a new user."},"UserAdminDetail":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"},"tier":{"type":"string","title":"Tier"},"is_verified":{"type":"boolean","title":"Is Verified"},"is_active":{"type":"boolean","title":"Is Active"},"is_admin":{"type":"boolean","title":"Is Admin"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"last_login_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Login At"},"comparison_count":{"type":"integer","title":"Comparison Count","default":0},"favorite_count":{"type":"integer","title":"Favorite Count","default":0},"inference_credit_balance_cents":{"type":"integer","title":"Inference Credit Balance Cents","default":0}},"type":"object","required":["id","email","tier","is_verified","is_active","is_admin","created_at"],"title":"UserAdminDetail","description":"Full user schema for admin detail view."},"UserAdminListItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"tier":{"type":"string","title":"Tier"},"is_active":{"type":"boolean","title":"Is Active"},"is_admin":{"type":"boolean","title":"Is Admin"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_login_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Login At"}},"type":"object","required":["id","email","tier","is_active","is_admin","created_at"],"title":"UserAdminListItem","description":"Simplified user schema for admin list view."},"UserAdminUpdate":{"properties":{"full_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Full Name"},"company":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Company"},"role":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Role"},"tier":{"anyOf":[{"type":"string","enum":["free","pro","enterprise"]},{"type":"null"}],"title":"Tier","description":"User subscription tier"},"is_verified":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Verified"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"is_admin":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Admin"}},"type":"object","title":"UserAdminUpdate","description":"Schema for updating a user (admin only fields)."},"UserFavoriteAdminItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"model_identity_id":{"type":"string","format":"uuid","title":"Model Identity Id"},"creator":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Creator"},"model_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Key"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","model_identity_id","created_at"],"title":"UserFavoriteAdminItem","description":"Admin view of a user's favorite model."},"UserFavoritesAdminResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/UserFavoriteAdminItem"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"total_pages":{"type":"integer","title":"Total Pages"}},"type":"object","required":["items","total","page","page_size","total_pages"],"title":"UserFavoritesAdminResponse","description":"Paginated list of user favorites for admin view."},"UserInterests":{"properties":{"selected":{"items":{"type":"string"},"type":"array","title":"Selected"},"building":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Building"},"other":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Other"}},"type":"object","title":"UserInterests","description":"Structured onboarding data."},"UserLimitsResponse":{"properties":{"tier":{"type":"string","title":"Tier"},"favorites":{"$ref":"#/components/schemas/ResourceUsage"},"saved_comparisons":{"$ref":"#/components/schemas/ResourceUsage"}},"type":"object","required":["tier","favorites","saved_comparisons"],"title":"UserLimitsResponse"},"UserLogin":{"properties":{"email":{"type":"string","format":"email","title":"Email","description":"User email address"},"password":{"type":"string","title":"Password","description":"User password"}},"type":"object","required":["email","password"],"title":"UserLogin","description":"Schema for user login"},"UserProfile":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","format":"email","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"},"tier":{"type":"string","title":"Tier"},"is_verified":{"type":"boolean","title":"Is Verified"},"is_active":{"type":"boolean","title":"Is Active"},"interests":{"anyOf":[{"$ref":"#/components/schemas/UserInterests"},{"type":"null"}]},"onboarding_completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Onboarding Completed At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_login_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Login At"}},"type":"object","required":["id","email","tier","is_verified","is_active","created_at"],"title":"UserProfile","description":"Schema for user profile response"},"UserProfileUpdate":{"properties":{"full_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Full Name"},"company":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Company"},"role":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Role"}},"additionalProperties":false,"type":"object","title":"UserProfileUpdate","description":"Schema for updating user profile"},"UserRegister":{"properties":{"email":{"type":"string","format":"email","title":"Email","description":"User email address"},"password":{"type":"string","maxLength":100,"minLength":8,"title":"Password","description":"Password (minimum 8 characters)"},"full_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Full Name","description":"Full name"},"company":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Company","description":"Company name"},"role":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Role","description":"Job role/title"}},"type":"object","required":["email","password"],"title":"UserRegister","description":"Schema for user registration"},"UserResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","format":"email","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"},"tier":{"type":"string","title":"Tier"},"is_verified":{"type":"boolean","title":"Is Verified"},"is_active":{"type":"boolean","title":"Is Active"},"interests":{"anyOf":[{"$ref":"#/components/schemas/UserInterests"},{"type":"null"}]},"onboarding_completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Onboarding Completed At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_login_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Login At"},"is_admin":{"type":"boolean","title":"Is Admin","default":false}},"type":"object","required":["id","email","tier","is_verified","is_active","created_at"],"title":"UserResponse","description":"Extended user profile with admin flag, used by /auth/me."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WizardIndustry":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"icon":{"type":"string","title":"Icon"},"use_cases":{"items":{"$ref":"#/components/schemas/WizardUseCase"},"type":"array","title":"Use Cases"}},"type":"object","required":["id","name","icon","use_cases"],"title":"WizardIndustry"},"WizardOptionsResponse":{"properties":{"industries":{"items":{"$ref":"#/components/schemas/WizardIndustry"},"type":"array","title":"Industries"},"scales":{"items":{"$ref":"#/components/schemas/WizardScaleOption"},"type":"array","title":"Scales"},"priorities":{"items":{"$ref":"#/components/schemas/WizardPriorityOption"},"type":"array","title":"Priorities"}},"type":"object","required":["industries","scales","priorities"],"title":"WizardOptionsResponse","description":"Wizard configuration, industries, use cases, scales, priorities"},"WizardPriorityOption":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"icon":{"type":"string","title":"Icon"}},"type":"object","required":["id","name","description","icon"],"title":"WizardPriorityOption"},"WizardRecommendRequest":{"properties":{"category":{"type":"string","title":"Category","description":"Industry category ID (e.g., 'software-technology', 'customer-experience')"},"use_case":{"type":"string","title":"Use Case","description":"Use case slug (e.g., 'code-generation') or 'custom' for custom use case"},"custom_use_case":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Use Case","description":"Custom use case description (when use_case is 'custom')"},"scale":{"type":"string","title":"Scale","description":"Scale ID: 'hobby', 'startup', 'growing', 'enterprise'"},"priorities":{"items":{"type":"string"},"type":"array","maxItems":2,"minItems":1,"title":"Priorities","description":"Priority IDs (1-2): 'cost', 'quality', 'speed', 'privacy', 'integration'"},"open_source_only":{"type":"boolean","title":"Open Source Only","description":"If true, only recommend open source models","default":false}},"type":"object","required":["category","use_case","scale","priorities"],"title":"WizardRecommendRequest","description":"Request schema for wizard-based recommendations"},"WizardRecommendResponse":{"properties":{"recommendations":{"items":{"$ref":"#/components/schemas/ModelRecommendation"},"type":"array","title":"Recommendations","description":"Top recommended models, ordered by match score"},"total_evaluated":{"type":"integer","title":"Total Evaluated","description":"Total number of models evaluated"}},"type":"object","required":["recommendations","total_evaluated"],"title":"WizardRecommendResponse","description":"Response schema for wizard recommendations"},"WizardScaleOption":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"icon":{"type":"string","title":"Icon"}},"type":"object","required":["id","name","description","icon"],"title":"WizardScaleOption"},"WizardUseCase":{"properties":{"slug":{"type":"string","title":"Slug"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"}},"type":"object","required":["slug","name","description"],"title":"WizardUseCase"},"WorkloadConfig":{"properties":{"requests_per_second":{"type":"number","minimum":0.0,"title":"Requests Per Second","description":"Target sustained RPS"},"avg_input_tokens":{"type":"integer","maximum":2000000.0,"minimum":1.0,"title":"Avg Input Tokens","description":"Average input prompt length"},"avg_output_tokens":{"type":"integer","maximum":200000.0,"minimum":1.0,"title":"Avg Output Tokens","description":"Average generated output length"},"concurrency":{"type":"integer","maximum":10000.0,"minimum":1.0,"title":"Concurrency","description":"Concurrent active requests"},"latency_target_ms":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Latency Target Ms","description":"Optional P95 latency target"}},"type":"object","required":["requests_per_second","avg_input_tokens","avg_output_tokens","concurrency"],"title":"WorkloadConfig"},"app__api__v1__admin__dedup__MergeRequest":{"properties":{"survivor_id":{"type":"string","format":"uuid","title":"Survivor Id","description":"Model that absorbs the others"},"loser_ids":{"items":{"type":"string","format":"uuid"},"type":"array","minItems":1,"title":"Loser Ids","description":"Models to merge into survivor"}},"type":"object","required":["survivor_id","loser_ids"],"title":"MergeRequest"},"app__api__v1__admin__dedup__MergeResponse":{"properties":{"survivor_id":{"type":"string","format":"uuid","title":"Survivor Id"},"survivor_slug":{"type":"string","title":"Survivor Slug"},"loser_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Loser Ids"},"source_versions_moved":{"type":"integer","title":"Source Versions Moved"},"identities_repointed":{"type":"integer","title":"Identities Repointed"}},"type":"object","required":["survivor_id","survivor_slug","loser_ids","source_versions_moved","identities_repointed"],"title":"MergeResponse"},"app__api__v1__admin__merge_tool__MergeRequest":{"properties":{"survivor_id":{"type":"string","format":"uuid","title":"Survivor Id"},"loser_ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":50,"minItems":1,"title":"Loser Ids"}},"type":"object","required":["survivor_id","loser_ids"],"title":"MergeRequest"},"app__api__v1__admin__merge_tool__MergeResponse":{"properties":{"survivor_id":{"type":"string","format":"uuid","title":"Survivor Id"},"survivor_slug":{"type":"string","title":"Survivor Slug"},"loser_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Loser Ids"},"identities_repointed":{"type":"integer","title":"Identities Repointed"},"routes_moved":{"type":"integer","title":"Routes Moved"}},"type":"object","required":["survivor_id","survivor_slug","loser_ids","identities_repointed","routes_moved"],"title":"MergeResponse","description":"What the merge actually did."}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}