{"openapi":"3.1.0","info":{"title":"Compresr Platform API","version":"1.0.0"},"paths":{"/api/profile/create":{"post":{"tags":["Profile"],"summary":"Create Profile","description":"Create user profile after signup. Honors account_type from onboarding; defaults to 'user'.","operationId":"create_profile_api_profile_create_post","requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ProfileCreateRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/profile/role":{"get":{"tags":["Profile"],"summary":"Get Role","description":"Return the caller's role and account type.","operationId":"get_role_api_profile_role_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/profile/me":{"get":{"tags":["Profile"],"summary":"Get Profile","description":"Get user profile.","operationId":"get_profile_api_profile_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"HTTPBearer":[]}]},"patch":{"tags":["Profile"],"summary":"Update Profile","description":"Update user profile.","operationId":"update_profile_api_profile_me_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileUpdateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileUpdateResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/profile/rate-limits":{"get":{"tags":["Profile"],"summary":"Get User Rate Limits","description":"Get rate limits for authenticated user based on their tier.","operationId":"get_user_rate_limits_api_profile_rate_limits_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitsResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/profile/can-delete":{"get":{"tags":["Profile"],"summary":"Check Can Delete","description":"Check if account can be deleted.","operationId":"check_can_delete_api_profile_can_delete_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteAccountResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/profile/delete":{"delete":{"tags":["Profile"],"summary":"Delete Account","description":"Delete account (requires confirmation='DELETE').","operationId":"delete_account_api_profile_delete_delete","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteAccountRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/compress/question-specific/":{"post":{"tags":["Compression"],"summary":"Compress Query Specific","description":"Compress single context with question-aware filtering.\n\nFor multiple context+query pairs, use the /batch endpoint.","operationId":"compress_query_specific_api_compress_question_specific__post","parameters":[{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuerySpecificCompressionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuerySpecificCompressionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/compress/question-specific/batch":{"post":{"tags":["Compression"],"summary":"Compress Query Specific Batch","description":"Batch compress multiple contexts with queries.","operationId":"compress_query_specific_batch_api_compress_question_specific_batch_post","parameters":[{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuerySpecificCompressionBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuerySpecificCompressionBatchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/compress/question-specific/stream":{"post":{"tags":["Compression"],"summary":"Compress Query Specific Stream","description":"Stream question-specific compression result over SSE.","operationId":"compress_query_specific_stream_api_compress_question_specific_stream_post","parameters":[{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuerySpecificCompressionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/compress/question-specific/health":{"get":{"tags":["Compression"],"summary":"Health Query Specific","description":"Health check for question-specific compression.","operationId":"health_query_specific_api_compress_question_specific_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}}}}},"/api/compress/question-specific/models":{"get":{"tags":["Compression"],"summary":"Models Query Specific","description":"List available question-specific compression models (admin-only hidden for non-admins).","operationId":"models_query_specific_api_compress_question_specific_models_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DemoDataResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/compress/question-specific/models/{model_id}":{"get":{"tags":["Compression"],"summary":"Model Query Specific","description":"Get details for a specific question-specific compression model.","operationId":"model_query_specific_api_compress_question_specific_models__model_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DemoDataResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/compress/history/":{"post":{"tags":["Compression-Agentic"],"summary":"Compress History","operationId":"compress_history_api_compress_history__post","parameters":[{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HistoryCompressRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HistoryCompressResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/compress/history/batch":{"post":{"tags":["Compression-Agentic"],"summary":"Compress History Batch","operationId":"compress_history_batch_api_compress_history_batch_post","parameters":[{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HistoryBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/compress/history/stream":{"post":{"tags":["Compression-Agentic"],"summary":"Compress History Stream","operationId":"compress_history_stream_api_compress_history_stream_post","parameters":[{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HistoryCompressRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/compress/history/health":{"get":{"tags":["Compression-Agentic"],"summary":"Health History","operationId":"health_history_api_compress_history_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health History Api Compress History Health Get"}}}}}}},"/api/compress/history/models":{"get":{"tags":["Compression-Agentic"],"summary":"Models History","operationId":"models_history_api_compress_history_models_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DemoDataResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/compress/history/models/{model_id}":{"get":{"tags":["Compression-Agentic"],"summary":"Model History","operationId":"model_history_api_compress_history_models__model_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DemoDataResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/compress/tool-output/":{"post":{"tags":["Compression-Agentic"],"summary":"Compress Tool Output","operationId":"compress_tool_output_api_compress_tool_output__post","parameters":[{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolOutputCompressRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolOutputCompressResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/compress/tool-output/batch":{"post":{"tags":["Compression-Agentic"],"summary":"Compress Tool Output Batch","operationId":"compress_tool_output_batch_api_compress_tool_output_batch_post","parameters":[{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolOutputBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/compress/tool-output/stream":{"post":{"tags":["Compression-Agentic"],"summary":"Compress Tool Output Stream","operationId":"compress_tool_output_stream_api_compress_tool_output_stream_post","parameters":[{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolOutputCompressRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/compress/tool-output/health":{"get":{"tags":["Compression-Agentic"],"summary":"Health Tool Output","operationId":"health_tool_output_api_compress_tool_output_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Tool Output Api Compress Tool Output Health Get"}}}}}}},"/api/compress/tool-output/models":{"get":{"tags":["Compression-Agentic"],"summary":"Models Tool Output","operationId":"models_tool_output_api_compress_tool_output_models_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DemoDataResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/compress/tool-output/models/{model_id}":{"get":{"tags":["Compression-Agentic"],"summary":"Model Tool Output","operationId":"model_tool_output_api_compress_tool_output_models__model_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DemoDataResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/compress/tool-discovery/":{"post":{"tags":["Compression-Agentic"],"summary":"Compress Tool Discovery","operationId":"compress_tool_discovery_api_compress_tool_discovery__post","parameters":[{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolDiscoveryRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolDiscoveryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/compress/tool-discovery/batch":{"post":{"tags":["Compression-Agentic"],"summary":"Compress Tool Discovery Batch","operationId":"compress_tool_discovery_batch_api_compress_tool_discovery_batch_post","parameters":[{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolDiscoveryBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/compress/tool-discovery/stream":{"post":{"tags":["Compression-Agentic"],"summary":"Compress Tool Discovery Stream","operationId":"compress_tool_discovery_stream_api_compress_tool_discovery_stream_post","parameters":[{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolDiscoveryRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/compress/tool-discovery/health":{"get":{"tags":["Compression-Agentic"],"summary":"Health Tool Discovery","operationId":"health_tool_discovery_api_compress_tool_discovery_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Tool Discovery Api Compress Tool Discovery Health Get"}}}}}}},"/api/compress/tool-discovery/models":{"get":{"tags":["Compression-Agentic"],"summary":"Models Tool Discovery","operationId":"models_tool_discovery_api_compress_tool_discovery_models_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DemoDataResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/compress/tool-discovery/models/{model_id}":{"get":{"tags":["Compression-Agentic"],"summary":"Model Tool Discovery","operationId":"model_tool_discovery_api_compress_tool_discovery_models__model_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DemoDataResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/demo/stream":{"get":{"tags":["Compression-Demo"],"summary":"Demo Stream","description":"Stream a demo compression result over SSE (GET - small payloads). Requires login.","operationId":"demo_stream_api_demo_stream_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"context","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":1000000,"title":"Context"}},{"name":"compression_model_name","in":"query","required":false,"schema":{"type":"string","default":"latte_v2","title":"Compression Model Name"}},{"name":"question","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":4096},{"type":"null"}],"title":"Question"}},{"name":"target_ratio","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target Ratio"}},{"name":"coarse","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Coarse"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Compression-Demo"],"summary":"Demo Stream Post","description":"Stream a demo compression result over SSE (POST - large payloads). Requires login.","operationId":"demo_stream_post_api_demo_stream_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DemoStreamRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/demo/test-output":{"post":{"tags":["Compression-Demo"],"summary":"Demo Test Output","description":"Stream an LLM answer using the compressed context (SSE). Requires login.","operationId":"demo_test_output_api_demo_test_output_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DemoTestOutputRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/demo/samples":{"get":{"tags":["Compression-Demo"],"summary":"Demo Samples","description":"Get sample texts and available demo models.","operationId":"demo_samples_api_demo_samples_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DemoDataResponse"}}}}}}},"/api/demo/health":{"get":{"tags":["Compression-Demo"],"summary":"Demo Health","description":"Health check for demo compression.","operationId":"demo_health_api_demo_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Demo Health Api Demo Health Get"}}}}}}},"/api/demo/models":{"get":{"tags":["Compression-Demo"],"summary":"Demo Models","description":"List available demo compression models.","operationId":"demo_models_api_demo_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DemoDataResponse"}}}}}}},"/api/compress/models":{"get":{"tags":["Compression-Models"],"summary":"List Compression Models","description":"List compression models; admin_only entries hidden for non-admins.","operationId":"list_compression_models_api_compress_models_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Type"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DemoDataResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/compress/models/{model_id}":{"get":{"tags":["Compression-Models"],"summary":"Get Compression Model","description":"Get a specific model. 404 (not 403) for admin_only when non-admin, to avoid leaking existence.","operationId":"get_compression_model_api_compress_models__model_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DemoDataResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/api-keys":{"get":{"tags":["API Keys"],"summary":"List Api Keys","description":"Get all API keys for current user (excludes demo-scoped keys).\n\nAlso returns a `revoked_summary` aggregate so the frontend can show\n\"N revoked keys\" info without listing each revoked row in the dropdown.","operationId":"list_api_keys_api_api_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIKeyListResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]},"post":{"tags":["API Keys"],"summary":"Create Api Key","description":"Create a new API key.\n\n- **name**: Display name for the key\n- **scope**: API key scope (user or enterprise; demo is admin-only)\n- **daily_limit**: Optional daily request limit (NULL = unlimited)\n- **expires_at**: Optional expiration date (NULL = 30 days from now)\n\n**Enterprise keys (scope=enterprise):**\n- Require admin approval before activation\n- Use postpaid billing (monthly invoicing)\n- Require company_name and request_message\n- Get Business subscription access + unlimited rate limits\n\n**Important**: The plain key is only shown once! Store it securely.","operationId":"create_api_key_api_api_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIKeyCreateRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIKeyCreatedResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/api-keys/demo-key-info":{"get":{"tags":["API Keys"],"summary":"Get Demo Key Info","description":"Get demo key information (remaining requests, etc.) without exposing the key.","operationId":"get_demo_key_info_api_api_keys_demo_key_info_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIKeyResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/api-keys/{key_id}/revoke":{"put":{"tags":["API Keys"],"summary":"Revoke Api Key","description":"Revoke an API key (soft delete).\n\n- **key_id**: Key UUID to revoke","operationId":"revoke_api_key_api_api_keys__key_id__revoke_put","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/api-keys/{key_id}":{"get":{"tags":["API Keys"],"summary":"Get Api Key","description":"Get a specific API key's details.\n\n- **key_id**: Key UUID","operationId":"get_api_key_api_api_keys__key_id__get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIKeyResponse"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/billing/create-checkout-session":{"post":{"tags":["Billing"],"summary":"Create Checkout Session","description":"Create Stripe Checkout session for adding funds. Returns hosted-page URL.","operationId":"create_checkout_session_api_billing_create_checkout_session_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutSessionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutSessionResponse"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/billing/upload":{"post":{"tags":["Billing"],"summary":"Upload Money","description":"[ADMIN ONLY] Manually credit a user account.\n\nSEC-004: This endpoint is restricted to admins only. Normal users credit\ntheir balance via the Stripe checkout flow, which is verified by webhook.","operationId":"upload_money_api_billing_upload_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoneyUploadRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoneyUploadResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/billing/transactions":{"get":{"tags":["Billing"],"summary":"Get Transactions","description":"Get transaction history with optional filters.\n\nQuery params:\n - limit: Max results (default 50)\n - start_date: Filter from date (ISO format: 2025-01-01)\n - end_date: Filter to date (ISO format: 2025-12-31)","operationId":"get_transactions_api_billing_transactions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionResponse"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/billing/receipts":{"get":{"tags":["Billing"],"summary":"Get Receipts","description":"Get Stripe invoice receipts with PDF download links.\n\nThese are formal Stripe invoices from payment_receipts — distinct from\nthe per-charge receipt_url available in transactions.metadata.\nCached 5 minutes (receipts rarely change).","operationId":"get_receipts_api_billing_receipts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentReceiptsResponse"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/billing/tiers":{"get":{"tags":["Billing"],"summary":"Get Tiers","description":"Return tier configs and per-scale rate-limit matrices.","operationId":"get_tiers_api_billing_tiers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TiersResponse"}}}}}}},"/api/billing/invoices":{"get":{"tags":["Billing"],"summary":"Get Invoices","description":"Get enterprise invoice history. Prepaid top-ups are on GET /billing/transactions.","operationId":"get_invoices_api_billing_invoices_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"enum":["paid","pending","draft","failed"],"type":"string"},{"type":"null"}],"description":"Filter by status: paid, pending, draft, failed","title":"Status"},"description":"Filter by status: paid, pending, draft, failed"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvoiceListResponse"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/billing/invoices/pay":{"post":{"tags":["Billing"],"summary":"Create Invoice Payment","description":"Create Stripe Checkout session to pay a pending enterprise invoice.","operationId":"create_invoice_payment_api_billing_invoices_pay_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvoicePaymentRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvoicePaymentResponse"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/billing/enterprise/budget":{"put":{"tags":["Billing"],"summary":"Set Enterprise Budget","description":"Set or update a monthly budget for an enterprise API key.\n\nBudget is a soft cap (alerts only); hard limit is admin-set credit_limit_usd.\nPass monthly_budget_usd=null to remove the budget (unlimited spending).","operationId":"set_enterprise_budget_api_billing_enterprise_budget_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnterpriseBudgetUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnterpriseBudgetResponse"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/billing/enterprise/budget/{api_key_id}":{"delete":{"tags":["Billing"],"summary":"Remove Enterprise Budget","description":"Remove the monthly budget for an enterprise API key (sets to unlimited).","operationId":"remove_enterprise_budget_api_billing_enterprise_budget__api_key_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","title":"Api Key Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnterpriseBudgetResponse"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/billing/webhooks/stripe":{"post":{"tags":["Billing"],"summary":"Stripe Webhook","description":"Handle Stripe webhooks (checkout.session.completed, payment_intent.succeeded).\n\nRecords transaction + updates balance when Stripe payment completes.\n\nSECURITY:\n- Validates Stripe signature before processing\n- Uses database UNIQUE constraint on stripe_payment_intent_id\n to prevent race condition double-crediting\n\nHandles:\n- checkout.session.completed: When Checkout Session payment succeeds\n- payment_intent.succeeded: When direct PaymentIntent succeeds\n- payment_intent.payment_failed: Logs failed payments","operationId":"stripe_webhook_api_billing_webhooks_stripe_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookResponse"}}}}}}},"/api/usage/stats":{"get":{"tags":["Usage"],"summary":"Get Usage Stats","description":"Get comprehensive usage statistics with time series.","operationId":"get_usage_stats_api_usage_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"enum":["last_day","last_week","last_month","last_90_days","last_year","current_month","custom"],"type":"string","description":"Time period: last_day, last_week, last_month, last_90_days, last_year, current_month, custom","default":"last_day","title":"Period"},"description":"Time period: last_day, last_week, last_month, last_90_days, last_year, current_month, custom"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date for custom period (YYYY-MM-DD)","title":"Start Date"},"description":"Start date for custom period (YYYY-MM-DD)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date for custom period (YYYY-MM-DD)","title":"End Date"},"description":"End date for custom period (YYYY-MM-DD)"},{"name":"group_by","in":"query","required":false,"schema":{"enum":["hour","day"],"type":"string","description":"Group by: hour or day","default":"day","title":"Group By"},"description":"Group by: hour or day"},{"name":"api_key_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by specific API key ID","title":"Api Key Id"},"description":"Filter by specific API key ID"},{"name":"model","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by specific model","title":"Model"},"description":"Filter by specific model"},{"name":"include_per_key","in":"query","required":false,"schema":{"type":"boolean","description":"When true (and no api_key_id filter), include per-key breakdown in one response.","default":false,"title":"Include Per Key"},"description":"When true (and no api_key_id filter), include per-key breakdown in one response."},{"name":"skip_cache","in":"query","required":false,"schema":{"type":"boolean","description":"Force-drain the Redis usage stream so pending events land in usage_logs before reading. Use when the user clicks refresh.","default":false,"title":"Skip Cache"},"description":"Force-drain the Redis usage stream so pending events land in usage_logs before reading. Use when the user clicks refresh."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageStatsResponse"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users":{"get":{"tags":["Admin"],"summary":"Get Users","description":"Get all users with filtering and sorting.\n\nUses UserListRequest schema for query parameters.\nSet skip_emails=true (default) for faster response in list views.","operationId":"get_users_api_admin_users_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":100,"pattern":"^[a-zA-Z0-9\\s\\-@._]+$"},{"type":"null"}],"title":"Search"}},{"name":"tier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier"}},{"name":"plan","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan"}},{"name":"has_enterprise_key","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Enterprise Key"}},{"name":"balance_min","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Balance Min"}},{"name":"balance_max","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Balance Max"}},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date From"}},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date To"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"sort_by","in":"query","required":false,"schema":{"enum":["created_at","full_name","company_name","last_login","last_request_at","total_used_money","total_uploaded_money","lifetime_charges","current_remaining_credits","total_api_calls","tier","plan","prepaid_added","prepaid_balance","prepaid_spent","postpaid_paid","postpaid_unpaid","postpaid_current_month","total_requests","total_tokens"],"type":"string","default":"created_at","title":"Sort By"}},{"name":"sort_order","in":"query","required":false,"schema":{"enum":["asc","desc"],"type":"string","default":"desc","title":"Sort Order"}},{"name":"skip_emails","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Skip Emails"}},{"name":"include_admins","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Admins"}},{"name":"include_pilots","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Pilots"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserListResponse"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/sync":{"post":{"tags":["Admin"],"summary":"Sync Users","description":"Force sync users data from database.\n\nClears all backend caches (email cache), flushes Redis usage stream to DB,\nand fetches fresh user data.\nUse this when you need to see the latest data that may be stale due to caching.","operationId":"sync_users_api_admin_users_sync_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserListResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/users/by-email/{email}":{"get":{"tags":["Admin"],"summary":"Get User By Email","description":"Get user details by email address.","operationId":"get_user_by_email_api_admin_users_by_email__email__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"email","in":"path","required":true,"schema":{"type":"string","maxLength":254,"pattern":"^[a-zA-Z0-9._%+\\-]+@[a-zA-Z0-9.\\-]+\\.[a-zA-Z]{2,}$","title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDetailsResponse"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/{user_id}":{"get":{"tags":["Admin"],"summary":"Get User Details","description":"Get detailed user information.","operationId":"get_user_details_api_admin_users__user_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDetailsResponse"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin"],"summary":"Delete User","description":"Delete a user account with data retention.\n\nFor enterprise accounts with unpaid invoices, returns 409 with billing details.\nA final invoice is auto-generated for unbilled current-month usage.\nDeletion proceeds only after all invoices are paid.","operationId":"delete_user_api_admin_users__user_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$","title":"User Id"}},{"name":"reason","in":"query","required":false,"schema":{"type":"string","maxLength":500,"title":"Reason"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Admin"],"summary":"Update User","description":"Update user profile information.","operationId":"update_user_api_admin_users__user_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/{user_id}/analytics":{"get":{"tags":["Admin"],"summary":"Get User Analytics","description":"Get comprehensive analytics for a specific user.\n\nIncludes:\n- Profile information\n- Financial summary (spending, credits, budget)\n- API usage statistics (calls, tokens, compression)\n- API keys list\n- Usage breakdown by model and request type","operationId":"get_user_analytics_api_admin_users__user_id__analytics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAnalyticsResponse"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/audit":{"get":{"tags":["Admin"],"summary":"Get Audit Logs","description":"Get audit logs.\n\nUses AuditLogsRequest schema for query parameters.","operationId":"get_audit_logs_api_admin_audit_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"action","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditLogsResponse"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/stats":{"get":{"tags":["Admin"],"summary":"Get Admin Stats","description":"Get platform statistics for admin dashboard.\n\n- **period**: Time period (last_day, last_week, last_month, last_90_days, last_year, custom)\n- **start_date**: Start date for custom period (YYYY-MM-DD)\n- **end_date**: End date for custom period (YYYY-MM-DD)\n- **api_key_types**: Filter by API key types (comma-separated: demo, completion, compress)\n- **compression_models**: Filter by compression models (comma-separated)\n- **tiers**: Filter by customer tiers (comma-separated: tier1, tier2, tier3, tier4, tier5)","operationId":"get_admin_stats_api_admin_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Time period: last_day, last_week, last_month, last_90_days, last_year, custom","default":"last_day","title":"Period"},"description":"Time period: last_day, last_week, last_month, last_90_days, last_year, custom"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}],"description":"Start date for custom period (ISO format: YYYY-MM-DD)","title":"Start Date"},"description":"Start date for custom period (ISO format: YYYY-MM-DD)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}],"description":"End date for custom period (ISO format: YYYY-MM-DD)","title":"End Date"},"description":"End date for custom period (ISO format: YYYY-MM-DD)"},{"name":"api_key_types","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by API key types (comma-separated): demo, completion, compress, or None for all","title":"Api Key Types"},"description":"Filter by API key types (comma-separated): demo, completion, compress, or None for all"},{"name":"compression_models","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by compression models (comma-separated, e.g., americano, latte) or None for all","title":"Compression Models"},"description":"Filter by compression models (comma-separated, e.g., americano, latte) or None for all"},{"name":"tiers","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by customer tiers (comma-separated, e.g., tier1, tier2, tier3) or None for all","title":"Tiers"},"description":"Filter by customer tiers (comma-separated, e.g., tier1, tier2, tier3) or None for all"},{"name":"skip_cache","in":"query","required":false,"schema":{"type":"boolean","description":"Invalidate cache and fetch fresh from DB. (Legacy alias: refresh)","default":false,"title":"Skip Cache"},"description":"Invalidate cache and fetch fresh from DB. (Legacy alias: refresh)"},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean","description":"DEPRECATED — use skip_cache. Kept for backward compatibility.","default":false,"title":"Refresh"},"description":"DEPRECATED — use skip_cache. Kept for backward compatibility."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminStatsResponse"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/active-users":{"get":{"tags":["Admin"],"summary":"Get Daily Active Users","description":"Get the list of users who were active on a specific date.\n\nReturns user names, emails, and request counts for the given day.","operationId":"get_daily_active_users_api_admin_active_users_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Date to get active users for (YYYY-MM-DD)","title":"Date"},"description":"Date to get active users for (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DailyActiveUsersResponse"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/active-users-count":{"get":{"tags":["Admin"],"summary":"Get Active Users Count","description":"Distinct active users over the selected period (deduplicated across days).\n\nLightweight companion to /admin/stats for the Daily Active Users card, whose\nheadline must show true distinct users in the period rather than a sum of\nper-day counts (which double-counts users active on multiple days).","operationId":"get_active_users_count_api_admin_active_users_count_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Time period: last_day, last_week, last_month, last_90_days, last_year, custom","default":"last_month","title":"Period"},"description":"Time period: last_day, last_week, last_month, last_90_days, last_year, custom"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}],"description":"Start date for custom period (ISO format: YYYY-MM-DD)","title":"Start Date"},"description":"Start date for custom period (ISO format: YYYY-MM-DD)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}],"description":"End date for custom period (ISO format: YYYY-MM-DD)","title":"End Date"},"description":"End date for custom period (ISO format: YYYY-MM-DD)"},{"name":"tiers","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by customer tiers (comma-separated, e.g., tier1, tier2, tier3) or None for all","title":"Tiers"},"description":"Filter by customer tiers (comma-separated, e.g., tier1, tier2, tier3) or None for all"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Active Users Count Api Admin Active Users Count Get"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/newsletter/subscribers":{"get":{"tags":["Admin"],"summary":"Get Newsletter Subscribers","description":"Get all newsletter subscribers (admin only).\n\n- **status**: Filter by subscription status (active/unsubscribed)","operationId":"get_newsletter_subscribers_api_admin_newsletter_subscribers_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status: active, unsubscribed","title":"Status"},"description":"Filter by status: active, unsubscribed"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsletterListResponse"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/newsletter/subscribers/{subscriber_id}":{"delete":{"tags":["Admin"],"summary":"Delete Newsletter Subscriber","description":"Delete a newsletter subscriber permanently.","operationId":"delete_newsletter_subscriber_api_admin_newsletter_subscribers__subscriber_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"subscriber_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$","title":"Subscriber Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/downloads/stats":{"get":{"tags":["Admin"],"summary":"Get Download Stats","description":"Get product download statistics for admin dashboard.\n\nTracks downloads of all Compresr products:\n- **gateway**: Context-Gateway CLI installs\n- **sdk_pypi**: Python SDK downloads (PyPI)\n- **extension_vscode**: VS Code extension installs\n\nFilters:\n- **period**: Time period (last_day, last_week, etc.)\n- **source**: Filter by specific product source","operationId":"get_download_stats_api_admin_downloads_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","description":"Time period: last_day, last_week, last_month, last_90_days, last_year, custom","default":"last_week","title":"Period"},"description":"Time period: last_day, last_week, last_month, last_90_days, last_year, custom"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date for custom period (ISO format: YYYY-MM-DD)","title":"Start Date"},"description":"Start date for custom period (ISO format: YYYY-MM-DD)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date for custom period (ISO format: YYYY-MM-DD)","title":"End Date"},"description":"End date for custom period (ISO format: YYYY-MM-DD)"},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by source: gateway, sdk_pypi, extension_vscode (or None for all)","title":"Source"},"description":"Filter by source: gateway, sdk_pypi, extension_vscode (or None for all)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DownloadStatsResponse"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/enterprise/billing":{"get":{"tags":["Admin"],"summary":"Get Enterprise Billing","description":"Get enterprise billing dashboard data.\n\nReturns all enterprise keys with their billing details:\n- Summary cards: total paid, unpaid, current month usage\n- List of enterprise keys with invoices\n\nAdmin/pilot accounts are excluded by default (same rule as the admin users\nlist); flip include_admins / include_pilots to bring them back in.","operationId":"get_enterprise_billing_api_admin_enterprise_billing_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"include_admins","in":"query","required":false,"schema":{"type":"boolean","description":"Include internal/admin-owned enterprise keys","default":false,"title":"Include Admins"},"description":"Include internal/admin-owned enterprise keys"},{"name":"include_pilots","in":"query","required":false,"schema":{"type":"boolean","description":"Include pilot accounts (e.g. Thomson Reuters, Character)","default":false,"title":"Include Pilots"},"description":"Include pilot accounts (e.g. Thomson Reuters, Character)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnterpriseBillingResponse"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/enterprise/pending":{"get":{"tags":["Admin"],"summary":"List Pending Enterprise Keys","description":"List all pending enterprise keys awaiting admin approval.\n\nReturns enterprise keys with status='pending' that need admin review.\nIncludes user info, company name, request message, and expected usage.","operationId":"list_pending_enterprise_keys_api_admin_enterprise_pending_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingEnterpriseKeysResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/enterprise/{key_id}/approve":{"put":{"tags":["Admin"],"summary":"Approve Enterprise Key","description":"Approve a pending enterprise key (Admin only).\n\nOnce approved:\n- Key status changes to 'active'\n- User can start using the key with postpaid billing\n- Credit limit is set (default or custom)\n\nOptionally override the credit limit.","operationId":"approve_enterprise_key_api_admin_enterprise__key_id__approve_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$","title":"Key Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnterpriseKeyApprovalRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnterpriseKeyApprovalResponse"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/enterprise/{key_id}/decline":{"put":{"tags":["Admin"],"summary":"Decline Enterprise Key","description":"Decline a pending enterprise key (Admin only).\n\nOnce declined:\n- Key status changes to 'declined'\n- User is notified with the decline reason\n- Key cannot be used\n\nProvide a decline_reason to explain why.","operationId":"decline_enterprise_key_api_admin_enterprise__key_id__decline_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$","title":"Key Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnterpriseKeyApprovalRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnterpriseKeyApprovalResponse"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/settings/excluded-patterns":{"get":{"tags":["Admin"],"summary":"Get Excluded Patterns","description":"Get all excluded email patterns grouped by source.\n\nReturns patterns from:\n- **patterns**: Editable patterns stored in DB (managed here)\n- **hardcoded**: Built-in patterns (e.g. \"compresr.ai\") -- cannot be removed\n- **env_patterns**: Patterns from STATS_EXCLUDED_EMAIL_PATTERNS env var -- read-only","operationId":"get_excluded_patterns_api_admin_settings_excluded_patterns_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExcludedPatternsResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["Admin"],"summary":"Add Excluded Pattern","description":"Add a new excluded email pattern (Admin only).\n\nPatterns are matched as substrings against user emails and names.\nExamples: \"@test.com\", \"staging\", \"internal\".","operationId":"add_excluded_pattern_api_admin_settings_excluded_patterns_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddExcludedPatternRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]},"delete":{"tags":["Admin"],"summary":"Remove Excluded Pattern","description":"Remove an excluded email pattern (Admin only).\n\nCannot remove built-in patterns like \"compresr.ai\".","operationId":"remove_excluded_pattern_api_admin_settings_excluded_patterns_delete","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemoveExcludedPatternRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/settings/pilot-patterns":{"get":{"tags":["Admin"],"summary":"Get Pilot Patterns","description":"Get pilot-account patterns (revenue excluded, usage kept), grouped by source.","operationId":"get_pilot_patterns_api_admin_settings_pilot_patterns_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExcludedPatternsResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["Admin"],"summary":"Add Pilot Pattern","description":"Add a pilot-account pattern (Admin only). Matches emails/names as substrings.","operationId":"add_pilot_pattern_api_admin_settings_pilot_patterns_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddExcludedPatternRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]},"delete":{"tags":["Admin"],"summary":"Remove Pilot Pattern","description":"Remove a pilot-account pattern (Admin only). Cannot remove built-in pilots.","operationId":"remove_pilot_pattern_api_admin_settings_pilot_patterns_delete","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemoveExcludedPatternRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/whitelist":{"get":{"tags":["Admin - Whitelist"],"summary":"List Whitelist","description":"Return every whitelist rule, newest first, with per-rule detected-user counts.","operationId":"list_whitelist_api_admin_whitelist_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhitelistListResponse"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["Admin - Whitelist"],"summary":"Add Whitelist","description":"Add a whitelist rule. 409-equivalent if the pattern already exists.","operationId":"add_whitelist_api_admin_whitelist_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhitelistCreateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhitelistEntry"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/whitelist/{rule_id}/matches":{"get":{"tags":["Admin - Whitelist"],"summary":"Whitelist Matches","description":"Return the users currently matched by a specific whitelist rule.\n\nData source is the cached Supabase auth email map + platform user_profiles\nfor full names, so the query is cheap even with many rules on the page.","operationId":"whitelist_matches_api_admin_whitelist__rule_id__matches_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhitelistMatchesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/whitelist/{rule_id}":{"delete":{"tags":["Admin - Whitelist"],"summary":"Delete Whitelist","description":"Remove a whitelist rule by id.","operationId":"delete_whitelist_api_admin_whitelist__rule_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Whitelist Api Admin Whitelist Rule Id Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/whitelist/preview":{"post":{"tags":["Admin - Whitelist"],"summary":"Preview Match","description":"Test an email against the current ruleset without side effects.\n\nUseful for admins verifying a rule before onboarding a customer.","operationId":"preview_match_api_admin_whitelist_preview_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhitelistMatchPreviewRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhitelistMatchPreviewResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/dashboard/stats":{"get":{"tags":["Dashboard"],"summary":"Get Dashboard Stats","description":"Get dashboard statistics for authenticated user.\n\nReturns comprehensive dashboard data including:\n- Current balance\n- Usage statistics\n- API key summaries\n- Recent activity\n\nQuery params:\n- skip_cache: Force fresh data from database, bypassing Redis cache","operationId":"get_dashboard_stats_api_dashboard_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skip_cache","in":"query","required":false,"schema":{"type":"boolean","description":"Force refresh, bypassing cache","default":false,"title":"Skip Cache"},"description":"Force refresh, bypassing cache"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardStatsResponse"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pricing/compression-models":{"get":{"tags":["Pricing"],"summary":"Get Compression Models","description":"Get our compression model(s) with pricing info (cached).\n\nUsed by frontend to display our pricing (e.g., latte_v1 @ $0.10/1M tokens).\n\nReturns:\n- List of compression models with:\n - name: Model name (e.g., \"latte_v1\")\n - display_name: Human-readable name\n - description: Model description\n - input_price_per_1m: Our price per 1M input tokens","operationId":"get_compression_models_api_pricing_compression_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompressionModelsResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/pricing/estimate-cost":{"post":{"tags":["Pricing"],"summary":"Estimate Compression Cost","description":"Estimate the cost of using our compression service.\n\nUsed by frontend pricing calculator.\n\nUser provides:\n- Compression model\n- Number of input tokens\n- Desired compression ratio\n\nReturns cost breakdown.","operationId":"estimate_compression_cost_api_pricing_estimate_cost_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EstimateCostRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EstimateCostResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/newsletter/subscribe":{"post":{"tags":["Newsletter"],"summary":"Subscribe To Newsletter","description":"Start a double-opt-in newsletter subscription.","operationId":"subscribe_to_newsletter_api_newsletter_subscribe_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsletterSubscribeRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsletterSubscribeResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/newsletter/confirm":{"post":{"tags":["Newsletter"],"summary":"Confirm Newsletter Subscription","description":"Complete the double-opt-in newsletter subscription.","operationId":"confirm_newsletter_subscription_api_newsletter_confirm_post","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","description":"Signed confirmation token from email","title":"Token"},"description":"Signed confirmation token from email"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsletterSubscribeResponse"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Too Many Requests"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/newsletter/unsubscribe":{"post":{"tags":["Newsletter"],"summary":"Unsubscribe From Newsletter","description":"Unsubscribe from the newsletter using token.\n\n- No authentication required\n- Token is from the unsubscribe link in emails","operationId":"unsubscribe_from_newsletter_api_newsletter_unsubscribe_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsletterUnsubscribeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsletterUnsubscribeResponse"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Newsletter"],"summary":"Unsubscribe Via Link","description":"Unsubscribe from the newsletter via GET request (for email links).\n\nThis endpoint allows one-click unsubscribe from email links.\nFormat: /newsletter/unsubscribe?token=","operationId":"unsubscribe_via_link_api_newsletter_unsubscribe_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","format":"uuid","description":"Unsubscribe token from email","title":"Token"},"description":"Unsubscribe token from email"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsletterUnsubscribeResponse"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/newsletter/status":{"get":{"tags":["Newsletter"],"summary":"Get Subscription Status","description":"Get subscription status by token.\n\nUsed by unsubscribe page to show current status.","operationId":"get_subscription_status_api_newsletter_status_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","format":"uuid","description":"Unsubscribe token from email","title":"Token"},"description":"Unsubscribe token from email"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsletterStatusResponse"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/feature/request":{"post":{"tags":["Feature Requests"],"summary":"Submit Feature Request","description":"Submit a feature request.\n\n- No authentication required\n- Validates email, subject, and description\n- Stores request for admin review\n- Rate limited: 5 requests per hour per IP","operationId":"submit_feature_request_api_feature_request_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureRequestCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureRequestResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded"},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/feature/admin/requests":{"get":{"tags":["Feature Requests"],"summary":"List Feature Requests","description":"List all feature requests with filtering.\n\n- Requires Support or Admin role\n- Supports filtering by status and priority\n- Supports search in email, subject, and description","operationId":"list_feature_requests_api_feature_admin_requests_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status","title":"Status"},"description":"Filter by status"},{"name":"priority","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by priority","title":"Priority"},"description":"Filter by priority"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search in email, subject, or description","title":"Search"},"description":"Search in email, subject, or description"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Max results","default":50,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination offset","default":0,"title":"Offset"},"description":"Pagination offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureRequestListResponse"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/feature/admin/requests/{request_id}":{"get":{"tags":["Feature Requests"],"summary":"Get Feature Request","description":"Get a single feature request by ID.\n\n- Requires Support or Admin role","operationId":"get_feature_request_api_feature_admin_requests__request_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureRequest"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Feature Requests"],"summary":"Update Feature Request","description":"Update a feature request status, priority, or notes.\n\n- Requires Admin role","operationId":"update_feature_request_api_feature_admin_requests__request_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureRequestUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureRequest"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Feature Requests"],"summary":"Delete Feature Request","description":"Delete a feature request.\n\n- Requires Admin role\n- This action is permanent","operationId":"delete_feature_request_api_feature_admin_requests__request_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/jobs/admin":{"get":{"tags":["Careers"],"summary":"Admin List Jobs","description":"List all jobs (includes drafts and closed). Requires Support or Admin.","operationId":"admin_list_jobs_api_jobs_admin_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/JobStatus"},{"type":"null"}],"description":"Filter by status","title":"Status"},"description":"Filter by status"},{"name":"department","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by department","title":"Department"},"description":"Filter by department"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search in title","title":"Search"},"description":"Search in title"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"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/JobAdminListResponse"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Careers"],"summary":"Admin Create Job","description":"Create a new job posting. Requires Admin.","operationId":"admin_create_job_api_jobs_admin_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/jobs/admin/applications":{"get":{"tags":["Careers"],"summary":"Admin List Applications","description":"List job applications with filters. Requires Support or Admin.","operationId":"admin_list_applications_api_jobs_admin_applications_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by job","title":"Job Id"},"description":"Filter by job"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/ApplicationStatus"},{"type":"null"}],"description":"Filter by status","title":"Status"},"description":"Filter by status"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search in name or email","title":"Search"},"description":"Search in name or email"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO datetime lower bound","title":"Date From"},"description":"ISO datetime lower bound"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO datetime upper bound","title":"Date To"},"description":"ISO datetime upper bound"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"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":{"$ref":"#/components/schemas/JobApplicationListResponse"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/jobs/admin/applications/{application_id}/cv/download":{"get":{"tags":["Careers"],"summary":"Admin Download Cv","description":"Stream the CV file for admin download. Requires Support or Admin.","operationId":"admin_download_cv_api_jobs_admin_applications__application_id__cv_download_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"application_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Application Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/jobs/admin/applications/{application_id}/cv/signed-url":{"get":{"tags":["Careers"],"summary":"Admin Cv Signed Url","description":"Return a short-lived Storage signed URL — for inline PDF preview.","operationId":"admin_cv_signed_url_api_jobs_admin_applications__application_id__cv_signed_url_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"application_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Application Id"}},{"name":"ttl_seconds","in":"query","required":false,"schema":{"type":"integer","maximum":3600,"minimum":60,"default":900,"title":"Ttl Seconds"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Cv Signed Url Api Jobs Admin Applications Application Id Cv Signed Url Get"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/jobs/admin/applications/purge":{"post":{"tags":["Careers"],"summary":"Admin Purge Applications","description":"Delete rejected/withdrawn applications older than `retention_days` days.\n\nCV files in Storage are removed first so no orphans are left behind.\nRate-limited to admin (not support) since it's destructive.","operationId":"admin_purge_applications_api_jobs_admin_applications_purge_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"retention_days","in":"query","required":false,"schema":{"type":"integer","maximum":3650,"minimum":1,"default":180,"title":"Retention Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplicationsPurgeResponse"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/jobs/admin/applications/export/xlsx":{"get":{"tags":["Careers"],"summary":"Admin Export Applications Xlsx","description":"Download an XLSX workbook — one sheet per job.","operationId":"admin_export_applications_xlsx_api_jobs_admin_applications_export_xlsx_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Job Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/ApplicationStatus"},{"type":"null"}],"title":"Status"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date From"}},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date To"}},{"name":"ids","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated application UUIDs","title":"Ids"},"description":"Comma-separated application UUIDs"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/jobs/admin/applications/export/zip":{"get":{"tags":["Careers"],"summary":"Admin Export Applications Zip","description":"Download a ZIP: applications.xlsx + cvs/_..","operationId":"admin_export_applications_zip_api_jobs_admin_applications_export_zip_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Job Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/ApplicationStatus"},{"type":"null"}],"title":"Status"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date From"}},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date To"}},{"name":"ids","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated application UUIDs","title":"Ids"},"description":"Comma-separated application UUIDs"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/jobs/admin/applications/{application_id}":{"get":{"tags":["Careers"],"summary":"Admin Get Application","description":"Get a single application. Requires Support or Admin.","operationId":"admin_get_application_api_jobs_admin_applications__application_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"application_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Application Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobApplication"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Careers"],"summary":"Admin Update Application","description":"Update application status or admin notes. Requires Admin.","operationId":"admin_update_application_api_jobs_admin_applications__application_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"application_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Application Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobApplicationUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobApplication"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Careers"],"summary":"Admin Delete Application","description":"Delete an application (also removes its CV from Storage). Requires Admin.","operationId":"admin_delete_application_api_jobs_admin_applications__application_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"application_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Application Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/jobs/admin/{job_id}":{"get":{"tags":["Careers"],"summary":"Admin Get Job","description":"Get a job by id (any status). Requires Support or Admin.","operationId":"admin_get_job_api_jobs_admin__job_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Careers"],"summary":"Admin Update Job","description":"Update a job (partial). Requires Admin.","operationId":"admin_update_job_api_jobs_admin__job_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Careers"],"summary":"Admin Delete Job","description":"Delete a job (cascades to applications and their CVs). Requires Admin.","operationId":"admin_delete_job_api_jobs_admin__job_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/jobs":{"get":{"tags":["Careers"],"summary":"List Public Jobs","description":"List published jobs. Public — no authentication required.","operationId":"list_public_jobs_api_jobs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobListResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/jobs/{slug}":{"get":{"tags":["Careers"],"summary":"Get Public Job","description":"Get a single published job by slug. Public — no authentication required.","operationId":"get_public_job_api_jobs__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/JobPublicResponse"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/jobs/{slug}/apply":{"post":{"tags":["Careers"],"summary":"Apply To Job","description":"Public application endpoint. Multipart form: fields + CV file.\n\n- Rate-limited per IP: 5/hour + 20/day (prod only, no auth required)\n- CV must be a PDF, max 10 MB\n- Duplicate applications (same email + non-withdrawn) are rejected","operationId":"apply_to_job_api_jobs__slug__apply_post","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_apply_to_job_api_jobs__slug__apply_post"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobApplicationSubmitResponse"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Not Found"},"429":{"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/install":{"get":{"tags":["Gateway"],"summary":"Get Install Script","description":"Serve the Context-Gateway install script.\n\n- No authentication required\n- Rate limited to 60 requests/minute per IP\n- Tracks download for analytics (version + geo only)\n- Fetches install.sh from GitHub (cached for 5 minutes)\n\nUsage:\n curl -fsSL https://compresr.ai/install | sh","operationId":"get_install_script_api_install_get","parameters":[{"name":"v","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"description":"Gateway version (default: latest)","title":"V"},"description":"Gateway version (default: latest)"},{"name":"req","in":"query","required":true,"schema":{"title":"Req"}}],"responses":{"200":{"description":"Install script","content":{"application/json":{"schema":{}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/gateway/downloads":{"get":{"tags":["Gateway"],"summary":"Get Public Download Count","description":"Get total Context-Gateway download count (public, no auth).\n\n- Rate limited to 120 requests/minute per IP\n- Used by frontend to display download count badge.\n- Returns all-time total downloads with 5-minute caching.","operationId":"get_public_download_count_api_gateway_downloads_get","parameters":[{"name":"req","in":"query","required":true,"schema":{"title":"Req"}}],"responses":{"200":{"description":"Total download count","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Public Download Count Api Gateway Downloads Get"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/gateway/stats":{"get":{"tags":["Gateway"],"summary":"Get Gateway Stats","description":"Get Context-Gateway install statistics.\n\n**Requires admin authentication**\n\nReturns aggregated stats:\n- Total installs (all time)\n- Installs by time period (day, week, month)\n- Breakdown by OS\n- Breakdown by version\n- Top 10 countries","operationId":"get_gateway_stats_api_gateway_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GatewayInstallStatsResponse"}}}},"401":{"description":"Unauthorized - requires API key"},"403":{"description":"Forbidden - admin access required"},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/gateway/installs":{"get":{"tags":["Gateway"],"summary":"Get Recent Installs","description":"Get recent Context-Gateway installs.\n\n**Requires admin authentication**\n\nReturns list of recent install records for admin dashboard.","operationId":"get_recent_installs_api_gateway_installs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Number of records to return","default":50,"title":"Limit"},"description":"Number of records to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GatewayInstallListResponse"}}}},"401":{"description":"Unauthorized - requires API key"},"403":{"description":"Forbidden - admin access required"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/gateway/status":{"get":{"tags":["Gateway"],"summary":"Get Gateway Status","description":"Get current usage status for Context-Gateway CLI display.\n\n**Requires API key authentication** (any valid COMPRESR_API_KEY)\n\nReturns lightweight status summary:\n- Credits remaining (subscription + wallet combined)\n- Usage percentage of monthly budget\n- Tier information\n- Request counts\n\nUsed by Context-Gateway to display a persistent status bar showing\nthe user's balance and usage during operation.","operationId":"get_gateway_status_api_gateway_status_get","parameters":[{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"User's usage status for gateway display","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GatewayStatusResponse"}}}},"401":{"description":"Unauthorized - requires API key"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/check-email":{"post":{"tags":["Auth"],"summary":"Check Email Exists","description":"Check if an email already has a completed account.\n\nReturns {\"exists\": true} only if the email is registered AND has a\nuser_profiles row (completed signup). Users mid-OTP-verification\nwon't be blocked, so \"Resend OTP\" still works.","operationId":"check_email_exists_api_auth_check_email_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailCheckResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/authorize/cli-token":{"post":{"tags":["OAuth Authorization"],"summary":"Get Cli Token","description":"Get or create the user's CLI Key for Context Gateway CLI.\n\nKey scope matches user's account_type (user=prepaid, enterprise=postpaid).\nSEC-001: key_plain is not stored, so existing keys are rotated.","operationId":"get_cli_token_api_authorize_cli_token_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CLIKeyResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/authorize/logout":{"post":{"tags":["OAuth Authorization"],"summary":"Logout","description":"Revoke the calling API key. Idempotent — 200 whether the key was ACTIVE or already gone.","operationId":"logout_api_authorize_logout_post","parameters":[{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogoutResponse"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/authorize/ws-callback":{"post":{"tags":["OAuth Authorization"],"summary":"Ws Callback","description":"Deliver a CLI key to a waiting WebSocket session.\n\nCalled by the frontend after the user authorizes in the browser.\nGets or rotates the user's CLI Key (scope matches account_type),\nthen pushes it over the WebSocket to the CLI.","operationId":"ws_callback_api_authorize_ws_callback_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WsCallbackRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WsCallbackResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/v1/telemetry/register":{"post":{"tags":["On-Prem Telemetry"],"summary":"Register signing secret for HMAC verification","description":"Register an on-prem signing secret (`opm_xxx`) for HMAC verification.\n\n Call once before sending telemetry (optional — the first batch auto-\n registers). The secret is encrypted at rest. `cmp_` API keys are rejected;\n mint an `opm_` credential in the dashboard under Settings -> On-Prem.\n\n **Required Headers:**\n - `X-API-Key`: Your Compresr API key\n\n **Body:**\n - `signing_secret`: On-prem signing secret (`opm_xxx`)\n - `instance_id`: Optional instance identifier","operationId":"register_signing_secret_api_v1_telemetry_register_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterSigningSecretRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterSigningSecretResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/telemetry/batch":{"post":{"tags":["On-Prem Telemetry"],"summary":"Ingest telemetry batch from on-prem instance","description":"Receive and store a batch of telemetry events from an on-prem Compresr instance.\n \n **Required Headers:**\n - `X-API-Key`: Compresr API key (authentication)\n - `X-Compresr-Signature`: HMAC signature (integrity)\n \n **Optional Headers:**\n - `X-Instance-ID`: On-prem instance identifier\n \n **First Request (auto-registration):**\n Include `signing_secret` (`opm_xxx`) in the body - it will be registered\n automatically. `cmp_` API keys are rejected; mint an `opm_` credential\n in the dashboard under Settings -> On-Prem first.\n\n **Signature Format:**\n ```\n t=timestamp,v1=HMAC-SHA256(timestamp + \".\" + JSON(payload), signing_secret)\n ```\n \n **Event Types:**\n - `compression`: Counted for billing\n - `error`: Logged only\n - `startup`/`shutdown`: Operational\n \n **Idempotency:**\n Same batch_id within 24h returns success without reprocessing.","operationId":"ingest_telemetry_batch_api_v1_telemetry_batch_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"x-instance-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"On-prem instance ID","title":"X-Instance-Id"},"description":"On-prem instance ID"},{"name":"x-compresr-signature","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"HMAC signature","title":"X-Compresr-Signature"},"description":"HMAC signature"},{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TelemetryBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TelemetryBatchResponse"}}}},"401":{"description":"Invalid API key or signature","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TelemetryErrorResponse"}}}},"400":{"description":"Invalid request body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Duplicate batch (idempotency)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TelemetryErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/telemetry/health":{"get":{"tags":["On-Prem Telemetry"],"summary":"Telemetry endpoint health check","description":"Simple health check for telemetry ingestion endpoint.","operationId":"telemetry_health_api_v1_telemetry_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Telemetry Health Api V1 Telemetry Health Get"}}}}}}},"/api/v1/onprem/validate-key":{"get":{"tags":["On-Prem"],"summary":"Validate Key","operationId":"validate_key_api_v1_onprem_validate_key_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/oauth/authorize":{"get":{"tags":["OAuth"],"summary":"Authorize","description":"Begin the authorization-code flow.\n\nOn success, redirect (302) to the frontend consent screen carrying the\nopaque ``request_id``. On validation failure, return a 400 JSON error\nrather than redirecting to an unvalidated URI.","operationId":"authorize_oauth_authorize_get","parameters":[{"name":"response_type","in":"query","required":true,"schema":{"type":"string","title":"Response Type"}},{"name":"client_id","in":"query","required":true,"schema":{"type":"string","title":"Client Id"}},{"name":"redirect_uri","in":"query","required":true,"schema":{"type":"string","title":"Redirect Uri"}},{"name":"code_challenge","in":"query","required":true,"schema":{"type":"string","title":"Code Challenge"}},{"name":"code_challenge_method","in":"query","required":false,"schema":{"type":"string","default":"S256","title":"Code Challenge Method"}},{"name":"state","in":"query","required":true,"schema":{"type":"string","title":"State"}},{"name":"scope","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scope"}},{"name":"org","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/oauth/authorize/request/{request_id}":{"get":{"tags":["OAuth"],"summary":"Get Authorize Request","description":"Return consent-screen render data for a pending authorization request.","operationId":"get_authorize_request_oauth_authorize_request__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/AuthorizationRequestInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/oauth/authorize/decision":{"post":{"tags":["OAuth"],"summary":"Authorize Decision","description":"Record the user's approve/deny decision and return the loopback redirect.","operationId":"authorize_decision_oauth_authorize_decision_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthorizationDecisionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthorizationDecisionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/oauth/token":{"post":{"tags":["OAuth"],"summary":"Token","description":"RFC 6749 token endpoint. Dispatches on ``grant_type`` and returns a\n``TokenResponse`` on success or an RFC 6749 JSON error envelope on failure.","operationId":"token_oauth_token_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_token_oauth_token_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/oauth/device_authorization":{"post":{"tags":["OAuth"],"summary":"Device Authorization","description":"RFC 8628 device authorization endpoint.","operationId":"device_authorization_oauth_device_authorization_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_device_authorization_oauth_device_authorization_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceAuthorizationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/oauth/device/decision":{"post":{"tags":["OAuth"],"summary":"Device Decision","description":"Record the user's approve/deny decision for a device authorization.","operationId":"device_decision_oauth_device_decision_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceDecisionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceDecisionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/tokens/count":{"post":{"tags":["Inference"],"summary":"Count Tokens Endpoint","description":"Count tokens in text for cost estimation.","operationId":"count_tokens_endpoint_api_tokens_count_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenCountRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenCountResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/":{"get":{"summary":"Root","description":"Health check endpoint","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"get":{"summary":"Health","description":"Health check endpoint for ALB.\n\nCRITICAL: Must respond within 5 seconds (ALB timeout).\nRedis checks are optional - failure should not fail the health check.","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health/deep":{"get":{"summary":"Deep Health","description":"Deep health check with dependency status.\n\nUse for monitoring dashboards and debugging.\nNOT for ALB health checks (too slow).\n\nQuery params:\n include_stripe: Include Stripe API check\n include_compression: Include compression service check","operationId":"deep_health_health_deep_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"include_stripe","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Stripe"}},{"name":"include_compression","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Compression"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health/circuits":{"get":{"summary":"Circuit Status","description":"Circuit breaker status for all services.\n\nUse for monitoring circuit breaker states and detecting\nfailing downstream services.\n\nSecurity: Requires support/admin role to prevent information disclosure.","operationId":"circuit_status_health_circuits_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/metrics":{"get":{"summary":"Metrics","description":"Prometheus-compatible metrics endpoint.\n\nReturns metrics in Prometheus exposition format for scraping.\n\nSecurity: Requires support/admin role to prevent information disclosure.","operationId":"metrics_metrics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/metrics/json":{"get":{"summary":"Metrics Json","description":"Metrics as JSON for dashboards and debugging.\n\nSecurity: Requires support/admin role to prevent information disclosure.","operationId":"metrics_json_metrics_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/ready":{"get":{"summary":"Readiness","description":"Readiness probe for Kubernetes/orchestrator.\n\nReturns 200 only if the service can handle requests:\n- Compression engine is initialized\n- At least one model is available","operationId":"readiness_ready_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/logs/stats":{"get":{"summary":"Logs Stats","description":"Get log file sizes for monitoring.\n\nReturns current sizes of error.log and warning.log.\nUseful to check if rotation is working and total disk usage.","operationId":"logs_stats_logs_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}}},"components":{"schemas":{"APIKeyCreateRequest":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name","description":"Display name for the key"},"scope":{"$ref":"#/components/schemas/APIKeyScope","description":"API key scope: user (regular prepaid) or enterprise (postpaid, requires admin approval)","default":"user"},"daily_limit":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Daily Limit","description":"Optional daily request limit (NULL = unlimited). Use for testing or rate-limited access."},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At","description":"Key expiration date (NULL = never expires, default = 30 days from now)"},"request_message":{"anyOf":[{"type":"string","maxLength":1000,"minLength":1},{"type":"null"}],"title":"Request Message","description":"Message explaining the reason for requesting API access. Required for enterprise keys."},"company_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Company Name","description":"Company name (required for enterprise keys)"},"expected_monthly_usage":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Expected Monthly Usage","description":"Expected monthly usage in USD (helps set credit limit for enterprise keys)"}},"type":"object","required":["name"],"title":"APIKeyCreateRequest"},"APIKeyCreatedResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"anyOf":[{"$ref":"#/components/schemas/APIKeyCreatedResult"},{"type":"null"}]}},"type":"object","title":"APIKeyCreatedResponse"},"APIKeyCreatedResult":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"scope":{"$ref":"#/components/schemas/APIKeyScope"},"status":{"$ref":"#/components/schemas/APIKeyStatus"},"billing_mode":{"$ref":"#/components/schemas/BillingMode","default":"prepaid"},"key":{"type":"string","title":"Key","description":"The API key - store securely, shown only once!"},"key_preview":{"type":"string","title":"Key Preview","description":"Masked preview of the key"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"}},"type":"object","required":["id","name","scope","status","key","key_preview","created_at"],"title":"APIKeyCreatedResult"},"APIKeyListResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"items":{"$ref":"#/components/schemas/APIKeyResult"},"type":"array","title":"Data","default":[]},"revoked_summary":{"anyOf":[{"$ref":"#/components/schemas/RevokedKeysSummary"},{"type":"null"}]}},"type":"object","title":"APIKeyListResponse"},"APIKeyResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"anyOf":[{"$ref":"#/components/schemas/APIKeyResult"},{"type":"null"}]}},"type":"object","title":"APIKeyResponse"},"APIKeyResult":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"scope":{"$ref":"#/components/schemas/APIKeyScope"},"status":{"$ref":"#/components/schemas/APIKeyStatus"},"billing_mode":{"$ref":"#/components/schemas/BillingMode","default":"prepaid"},"key_preview":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Key Preview"},"key_plain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Key Plain"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"total_requests":{"type":"integer","title":"Total Requests","default":0},"created_at":{"type":"string","format":"date-time","title":"Created At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"daily_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Daily Limit"},"daily_requests_remaining":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Daily Requests Remaining"},"last_reset_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Reset At"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"credit_limit_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Credit Limit Usd"},"current_balance_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Current Balance Usd"}},"type":"object","required":["id","name","scope","status","created_at"],"title":"APIKeyResult"},"APIKeyScope":{"type":"string","enum":["demo","user","enterprise"],"title":"APIKeyScope"},"APIKeyStatus":{"type":"string","enum":["pending","active","expired","declined","revoked"],"title":"APIKeyStatus"},"AccountType":{"type":"string","enum":["user","enterprise"],"title":"AccountType","description":"Account type: determines billing mode and allowed API key scopes.\n\n- USER: Prepaid wallet billing, can create user-scope keys\n- ENTERPRISE: Postpaid invoice billing, can create enterprise-scope keys"},"ActiveUserInfo":{"properties":{"user_id":{"type":"string","title":"User Id","description":"User ID"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email","description":"User email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name","description":"User full name"},"request_count":{"type":"integer","title":"Request Count","description":"Number of requests on this day","default":0}},"type":"object","required":["user_id"],"title":"ActiveUserInfo"},"AddExcludedPatternRequest":{"properties":{"pattern":{"type":"string","maxLength":254,"minLength":1,"title":"Pattern","description":"Pattern to exclude"}},"type":"object","required":["pattern"],"title":"AddExcludedPatternRequest"},"AdminStatsResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"total_users":{"type":"integer","title":"Total Users","default":0},"total_admin_users":{"type":"integer","title":"Total Admin Users","default":0},"active_users":{"type":"integer","title":"Active Users","default":0},"active_users_previous_period":{"type":"integer","title":"Active Users Previous Period","default":0},"new_signups":{"type":"integer","title":"New Signups","default":0},"paying_users":{"type":"integer","title":"Paying Users","default":0},"churned_users":{"type":"integer","title":"Churned Users","default":0},"users_by_tier":{"additionalProperties":{"type":"integer"},"type":"object","title":"Users By Tier"},"credit_spent":{"type":"number","title":"Credit Spent","default":0.0},"credit_spent_in_period":{"type":"number","title":"Credit Spent In Period","default":0.0},"admin_credit_spent":{"type":"number","title":"Admin Credit Spent","default":0.0},"admin_credit_spent_in_period":{"type":"number","title":"Admin Credit Spent In Period","default":0.0},"user_savings_usd":{"type":"number","title":"User Savings Usd","default":0.0},"admin_savings_usd":{"type":"number","title":"Admin Savings Usd","default":0.0},"revenue":{"type":"number","title":"Revenue","default":0.0},"revenue_in_period":{"type":"number","title":"Revenue In Period","default":0.0},"revenue_previous_period":{"type":"number","title":"Revenue Previous Period","default":0.0},"enterprise_revenue":{"type":"number","title":"Enterprise Revenue","default":0.0},"enterprise_revenue_in_period":{"type":"number","title":"Enterprise Revenue In Period","default":0.0},"total_requests":{"type":"integer","title":"Total Requests","default":0},"user_requests":{"type":"integer","title":"User Requests","default":0},"admin_requests":{"type":"integer","title":"Admin Requests","default":0},"anonymous_demo_requests":{"type":"integer","title":"Anonymous Demo Requests","default":0},"requests_per_minute":{"type":"number","title":"Requests Per Minute","default":0.0},"total_tokens":{"type":"integer","title":"Total Tokens","default":0},"user_tokens":{"type":"integer","title":"User Tokens","default":0},"admin_tokens":{"type":"integer","title":"Admin Tokens","default":0},"user_tokens_saved":{"type":"integer","title":"User Tokens Saved","default":0},"admin_tokens_saved":{"type":"integer","title":"Admin Tokens Saved","default":0},"newsletter_total":{"type":"integer","title":"Newsletter Total","default":0},"newsletter_active":{"type":"integer","title":"Newsletter Active","default":0},"newsletter_unsubscribed":{"type":"integer","title":"Newsletter Unsubscribed","default":0},"features_total":{"type":"integer","title":"Features Total","default":0},"features_pending":{"type":"integer","title":"Features Pending","default":0},"features_approved":{"type":"integer","title":"Features Approved","default":0},"gateway_unique_users":{"type":"integer","title":"Gateway Unique Users","default":0},"gateway_total_requests":{"type":"integer","title":"Gateway Total Requests","default":0},"gateway_requests_in_period":{"type":"integer","title":"Gateway Requests In Period","default":0},"downloads_total":{"type":"integer","title":"Downloads Total","default":0},"downloads_in_period":{"type":"integer","title":"Downloads In Period","default":0},"downloads_gateway":{"type":"integer","title":"Downloads Gateway","default":0},"daily_active_users":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Daily Active Users","description":"Daily active users: [{timestamp, count}]"},"time_series":{"items":{"$ref":"#/components/schemas/AdminTimeSeriesDataPoint"},"type":"array","title":"Time Series"},"usage_breakdown":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Usage Breakdown","description":"Daily usage by category: [{timestamp, {user,admin,pilot}_{requests,tokens,usd}}]"},"revenue_breakdown":{"anyOf":[{"$ref":"#/components/schemas/RevenueBreakdown"},{"type":"null"}]},"model_stats":{"items":{"$ref":"#/components/schemas/ModelStats"},"type":"array","title":"Model Stats"},"period":{"type":"string","title":"Period","default":"last_day"},"period_start":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Period Start"},"period_end":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Period End"}},"type":"object","title":"AdminStatsResponse"},"AdminTimeSeriesDataPoint":{"properties":{"timestamp":{"type":"string","title":"Timestamp","description":"ISO timestamp"},"requests":{"type":"integer","title":"Requests","description":"Number of requests","default":0},"tokens":{"type":"integer","title":"Tokens","description":"Total tokens processed","default":0},"cost_usd":{"type":"number","title":"Cost Usd","description":"Cost in USD (user spending)","default":0.0},"revenue_usd":{"type":"number","title":"Revenue Usd","description":"Revenue in USD","default":0.0},"compression_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Compression Model","description":"Compression model used"},"api_key_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key Type","description":"API key type/scope (demo, user, enterprise)"},"request_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Source","description":"Request source: sdk, demo, or gateway"},"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier","description":"User tier"}},"type":"object","required":["timestamp"],"title":"AdminTimeSeriesDataPoint"},"ApiKeyUsageSummary":{"properties":{"api_key_id":{"type":"string","title":"Api Key Id","description":"API key UUID"},"api_key_name":{"type":"string","title":"Api Key Name","description":"API key name"},"requests_this_month":{"type":"integer","title":"Requests This Month","description":"Requests made this month (resets monthly)","default":0},"money_used_this_month":{"type":"number","title":"Money Used This Month","description":"Money used via this key this month (USD)","default":0.0},"budget_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Budget Limit","description":"Budget limit for this key (USD)"},"budget_remaining":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Budget Remaining","description":"Budget remaining for this key (USD)"}},"type":"object","required":["api_key_id","api_key_name"],"title":"ApiKeyUsageSummary","description":"Summary of usage for a single API key (dashboard view).\n\nNote: requests_this_month uses current_month_requests from DB which resets monthly."},"ApplicationQuestion":{"properties":{"id":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-z0-9_]+$","title":"Id"},"type":{"$ref":"#/components/schemas/ApplicationQuestionType"},"label":{"type":"string","maxLength":500,"minLength":1,"title":"Label"},"required":{"type":"boolean","title":"Required","default":false},"options":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Options","description":"For select/multiselect, the allowed choices."},"help_text":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Help Text"}},"type":"object","required":["id","type","label"],"title":"ApplicationQuestion","description":"Per-job custom application question (admin-defined)."},"ApplicationQuestionType":{"type":"string","enum":["short_text","long_text","select","multiselect","url","yes_no"],"title":"ApplicationQuestionType"},"ApplicationStatus":{"type":"string","enum":["new","reviewing","interviewing","offer","hired","rejected","withdrawn"],"title":"ApplicationStatus"},"ApplicationsPurgeResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"retention_days":{"type":"integer","title":"Retention Days"},"statuses_purged":{"items":{"type":"string"},"type":"array","title":"Statuses Purged"},"scanned":{"type":"integer","title":"Scanned"},"deleted":{"type":"integer","title":"Deleted"},"cv_files_removed":{"type":"integer","title":"Cv Files Removed"},"errors":{"items":{"type":"string"},"type":"array","title":"Errors"}},"type":"object","required":["retention_days","statuses_purged","scanned","deleted","cv_files_removed"],"title":"ApplicationsPurgeResponse"},"AuditLogEntry":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"admin_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin Id"},"admin_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin Name"},"action":{"type":"string","title":"Action"},"target_user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target User Id"},"details":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Details"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["action"],"title":"AuditLogEntry"},"AuditLogsResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"logs":{"items":{"$ref":"#/components/schemas/AuditLogEntry"},"type":"array","title":"Logs","default":[]},"total":{"type":"integer","title":"Total","default":0},"page":{"type":"integer","title":"Page","default":1},"limit":{"type":"integer","title":"Limit","default":50}},"type":"object","title":"AuditLogsResponse"},"AuthorizationDecisionRequest":{"properties":{"request_id":{"type":"string","title":"Request Id"},"approve":{"type":"boolean","title":"Approve","default":true}},"type":"object","required":["request_id"],"title":"AuthorizationDecisionRequest","description":"User's approve/deny decision for an authorization request."},"AuthorizationDecisionResponse":{"properties":{"redirect_uri":{"type":"string","title":"Redirect Uri","description":"Full loopback URL including code+state, or error=access_denied"}},"type":"object","required":["redirect_uri"],"title":"AuthorizationDecisionResponse","description":"Full loopback redirect URL incl. code+state OR error=access_denied."},"AuthorizationRequestInfo":{"properties":{"request_id":{"type":"string","title":"Request Id"},"client_id":{"type":"string","title":"Client Id"},"scope":{"type":"string","title":"Scope"},"org":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org"},"redirect_uri":{"type":"string","title":"Redirect Uri"}},"type":"object","required":["request_id","client_id","scope","redirect_uri"],"title":"AuthorizationRequestInfo","description":"Consent-screen render data for a pending authorization request."},"BillingMode":{"type":"string","enum":["prepaid","postpaid"],"title":"BillingMode","description":"Billing mode for API keys.\n\nPREPAID: User must have positive balance. Session stops if balance runs out.\n Used by regular users (demo, user scopes).\n\nPOSTPAID: Can go negative. Invoiced monthly.\n Used by enterprise keys only (requires admin approval)."},"Body_apply_to_job_api_jobs__slug__apply_post":{"properties":{"full_name":{"type":"string","maxLength":200,"minLength":1,"title":"Full Name"},"email":{"type":"string","maxLength":254,"title":"Email"},"linkedin_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin Url"},"custom_answers":{"type":"string","title":"Custom Answers","default":"{}"},"cv":{"type":"string","format":"binary","title":"Cv"}},"type":"object","required":["full_name","email","cv"],"title":"Body_apply_to_job_api_jobs__slug__apply_post"},"Body_device_authorization_oauth_device_authorization_post":{"properties":{"client_id":{"type":"string","title":"Client Id"},"scope":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scope"}},"type":"object","required":["client_id"],"title":"Body_device_authorization_oauth_device_authorization_post"},"Body_token_oauth_token_post":{"properties":{"grant_type":{"type":"string","title":"Grant Type"},"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"redirect_uri":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Redirect Uri"},"client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Id"},"code_verifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code Verifier"},"refresh_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Refresh Token"},"device_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Code"}},"type":"object","required":["grant_type"],"title":"Body_token_oauth_token_post"},"CLIKeyResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"token":{"type":"string","title":"Token"},"message":{"type":"string","title":"Message"}},"type":"object","required":["success","token","message"],"title":"CLIKeyResponse"},"CheckoutSessionRequest":{"properties":{"amount_usd":{"type":"number","maximum":10000.0,"minimum":1.0,"title":"Amount Usd","description":"Amount to upload ($1-$10,000)"}},"type":"object","required":["amount_usd"],"title":"CheckoutSessionRequest"},"CheckoutSessionResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url","description":"Stripe Checkout URL to redirect user"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id","description":"Stripe session ID"}},"type":"object","title":"CheckoutSessionResponse"},"CompressionModelInfo":{"properties":{"name":{"type":"string","title":"Name","description":"Model name (e.g., 'latte_v1')"},"display_name":{"type":"string","title":"Display Name","description":"Human-readable name"},"description":{"type":"string","title":"Description","description":"Description of the compression technology"},"input_price_per_1m":{"type":"number","title":"Input Price Per 1M","description":"Our price per 1M input tokens"},"min_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Min Tier","description":"Minimum subscription tier required"}},"type":"object","required":["name","display_name","description","input_price_per_1m"],"title":"CompressionModelInfo"},"CompressionModelsResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"items":{"$ref":"#/components/schemas/CompressionModelInfo"},"type":"array","title":"Data"}},"type":"object","required":["data"],"title":"CompressionModelsResponse"},"CompressionResult":{"properties":{"original_tokens":{"type":"integer","title":"Original Tokens","description":"Token count of original context"},"compressed_tokens":{"type":"integer","title":"Compressed Tokens","description":"Token count after compression"},"target_compression_ratio":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target Compression Ratio","description":"User-requested compression ratio (if provided)"},"actual_compression_ratio":{"type":"number","title":"Actual Compression Ratio","description":"Actual achieved compression ratio (0-1)"},"tokens_saved":{"type":"integer","title":"Tokens Saved","description":"Number of tokens saved"},"duration_ms":{"type":"integer","title":"Duration Ms","description":"Processing time in milliseconds"},"compressed_context":{"type":"string","title":"Compressed Context","description":"Compressed context text"}},"type":"object","required":["original_tokens","compressed_tokens","actual_compression_ratio","tokens_saved","duration_ms","compressed_context"],"title":"CompressionResult","description":"Canonical single-context compression result.\n\nUsed by query-specific routes, demo, and agentic responses."},"CostBreakdown":{"properties":{"input_tokens":{"type":"integer","minimum":0.0,"title":"Input Tokens","description":"Original input token count"},"compressed_tokens":{"type":"integer","minimum":0.0,"title":"Compressed Tokens","description":"Estimated compressed token count"},"tokens_saved":{"type":"integer","minimum":0.0,"title":"Tokens Saved","description":"Estimated tokens saved"},"compression_ratio":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Compression Ratio","description":"Compression ratio (0-1)"},"processing_cost_usd":{"type":"number","minimum":0.0,"title":"Processing Cost Usd","description":"Estimated processing cost in USD"},"model":{"type":"string","title":"Model","description":"Compression model used for estimate"},"input_price_per_1m":{"type":"number","minimum":0.0,"title":"Input Price Per 1M","description":"Input price per 1M tokens"}},"type":"object","required":["input_tokens","compressed_tokens","tokens_saved","compression_ratio","processing_cost_usd","model","input_price_per_1m"],"title":"CostBreakdown"},"DailyActiveUsersResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"date":{"type":"string","title":"Date","description":"Date (YYYY-MM-DD)"},"count":{"type":"integer","title":"Count","description":"Number of active users","default":0},"users":{"items":{"$ref":"#/components/schemas/ActiveUserInfo"},"type":"array","title":"Users","description":"List of active users"}},"type":"object","required":["date"],"title":"DailyActiveUsersResponse"},"DashboardStats":{"properties":{"total_uploaded_money":{"type":"number","title":"Total Uploaded Money","description":"Total money uploaded to account (USD)","default":0.0},"total_used_money":{"type":"number","title":"Total Used Money","description":"Total money consumed via API usage (USD)","default":0.0},"wallet_balance_usd":{"type":"number","title":"Wallet Balance Usd","description":"Wallet balance from Stripe deposits (USD)","default":0.0},"total_available_usd":{"type":"number","title":"Total Available Usd","description":"Total spendable balance (wallet_balance_usd)","default":0.0},"usage_percentage":{"type":"number","title":"Usage Percentage","description":"Percentage of uploaded money used","default":0.0},"monthly_budget":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Monthly Budget","description":"User's monthly budget limit (USD, None for admin/unlimited)"},"budget_used_this_month":{"type":"number","title":"Budget Used This Month","description":"Money used this month (USD)","default":0.0},"budget_remaining_this_month":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Budget Remaining This Month","description":"Budget remaining this month (USD, None for unlimited)"},"budget_percentage":{"type":"number","title":"Budget Percentage","description":"Percentage of monthly budget used","default":0.0},"spend_this_month":{"type":"number","title":"Spend This Month","description":"Total money spent this month (USD)","default":0.0},"total_api_calls":{"type":"integer","title":"Total Api Calls","description":"Total API calls (all time)","default":0},"api_calls_this_month":{"type":"integer","title":"Api Calls This Month","description":"API calls in current month","default":0},"active_api_keys":{"type":"integer","title":"Active Api Keys","description":"Number of active API keys","default":0},"cloud_calls_this_month":{"type":"integer","title":"Cloud Calls This Month","description":"API calls this month sourced from cloud SDK / direct API","default":0},"onprem_calls_this_month":{"type":"integer","title":"Onprem Calls This Month","description":"API calls this month sourced from on-prem instances","default":0},"days_until_month_reset":{"type":"integer","title":"Days Until Month Reset","description":"Days until current month ends","default":0},"current_month":{"type":"string","title":"Current Month","description":"Current month (YYYY-MM format)","default":""},"avg_compression_ratio":{"type":"number","title":"Avg Compression Ratio","description":"Average compression ratio (last 30 days)","default":0.0},"total_tokens_saved":{"type":"integer","title":"Total Tokens Saved","description":"Total tokens saved (all time)","default":0},"tokens_saved_this_month":{"type":"integer","title":"Tokens Saved This Month","description":"Tokens saved this month","default":0},"total_input_tokens_this_month":{"type":"integer","title":"Total Input Tokens This Month","description":"Total input tokens processed this month","default":0},"tier":{"$ref":"#/components/schemas/TierName","description":"Current rate-limit tier (tier1, tier2, etc.)","default":"tier1"},"account_type":{"$ref":"#/components/schemas/AccountType","description":"Account type: user (prepaid wallet) or enterprise (postpaid invoicing)","default":"user"},"is_admin":{"type":"boolean","title":"Is Admin","description":"Whether user is admin (infinite usage)","default":false},"account_created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Created At","description":"Account creation date"},"api_key_usage":{"items":{"$ref":"#/components/schemas/ApiKeyUsageSummary"},"type":"array","title":"Api Key Usage","description":"Usage breakdown per API key"},"enterprise_keys":{"items":{"$ref":"#/components/schemas/EnterpriseKeyUsage"},"type":"array","title":"Enterprise Keys","description":"Usage for enterprise (postpaid) API keys"},"has_unpaid_invoices":{"type":"boolean","title":"Has Unpaid Invoices","description":"Whether user has any unpaid enterprise invoices","default":false},"unpaid_invoice_amount_usd":{"type":"number","title":"Unpaid Invoice Amount Usd","description":"Total amount of unpaid enterprise invoices (USD)","default":0.0},"top_models":{"items":{"$ref":"#/components/schemas/ModelStatsItem"},"type":"array","title":"Top Models","description":"Top 3 most used models with usage stats"}},"type":"object","title":"DashboardStats"},"DashboardStatsResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"anyOf":[{"$ref":"#/components/schemas/DashboardStats"},{"type":"null"}]}},"type":"object","title":"DashboardStatsResponse"},"DeleteAccountInfo":{"properties":{"can_delete":{"type":"boolean","title":"Can Delete","default":true},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"pending_balance":{"type":"number","title":"Pending Balance","default":0.0},"pending_reports":{"type":"integer","title":"Pending Reports","default":0}},"type":"object","title":"DeleteAccountInfo"},"DeleteAccountRequest":{"properties":{"confirmation":{"type":"string","const":"DELETE","title":"Confirmation","description":"Must be 'DELETE' to confirm"}},"type":"object","required":["confirmation"],"title":"DeleteAccountRequest"},"DeleteAccountResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"anyOf":[{"$ref":"#/components/schemas/DeleteAccountInfo"},{"type":"null"}]}},"type":"object","title":"DeleteAccountResponse"},"DemoCompressionModelOption":{"properties":{"value":{"type":"string","title":"Value"},"label":{"type":"string","title":"Label"},"description":{"type":"string","title":"Description","default":""},"tier_scale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier Scale"}},"type":"object","required":["value","label"],"title":"DemoCompressionModelOption"},"DemoData":{"properties":{"sample_texts":{"items":{"$ref":"#/components/schemas/SampleText"},"type":"array","title":"Sample Texts"},"compression_models":{"items":{"$ref":"#/components/schemas/DemoCompressionModelOption"},"type":"array","title":"Compression Models","default":[]}},"type":"object","required":["sample_texts"],"title":"DemoData"},"DemoDataResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"$ref":"#/components/schemas/DemoData"}},"type":"object","required":["data"],"title":"DemoDataResponse"},"DemoStreamRequest":{"properties":{"context":{"type":"string","maxLength":1000000,"minLength":1,"title":"Context"},"compression_model_name":{"type":"string","title":"Compression Model Name","default":"latte_v2"},"question":{"anyOf":[{"type":"string","maxLength":4096},{"type":"null"}],"title":"Question"},"target_ratio":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target Ratio"},"coarse":{"type":"boolean","title":"Coarse","default":true}},"type":"object","required":["context"],"title":"DemoStreamRequest"},"DemoTestOutputRequest":{"properties":{"question":{"type":"string","maxLength":4096,"minLength":1,"title":"Question"},"compressed_context":{"type":"string","maxLength":1000000,"minLength":1,"title":"Compressed Context"}},"type":"object","required":["question","compressed_context"],"title":"DemoTestOutputRequest"},"DeviceAuthorizationResponse":{"properties":{"device_code":{"type":"string","title":"Device Code"},"user_code":{"type":"string","title":"User Code"},"verification_uri":{"type":"string","title":"Verification Uri"},"verification_uri_complete":{"type":"string","title":"Verification Uri Complete"},"expires_in":{"type":"integer","title":"Expires In"},"interval":{"type":"integer","title":"Interval"}},"type":"object","required":["device_code","user_code","verification_uri","verification_uri_complete","expires_in","interval"],"title":"DeviceAuthorizationResponse","description":"RFC 8628 device authorization response."},"DeviceDecisionRequest":{"properties":{"user_code":{"type":"string","title":"User Code"},"approve":{"type":"boolean","title":"Approve","default":true}},"type":"object","required":["user_code"],"title":"DeviceDecisionRequest","description":"User's approve/deny decision for a device authorization."},"DeviceDecisionResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"}},"type":"object","required":["success","message"],"title":"DeviceDecisionResponse","description":"Result of a device authorization decision."},"DownloadStatsResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"period":{"type":"string","title":"Period","description":"Time period (last_hour, last_day, etc.)"},"period_start":{"type":"string","title":"Period Start","description":"Start of period (ISO)"},"period_end":{"type":"string","title":"Period End","description":"End of period (ISO)"},"total_downloads":{"type":"integer","title":"Total Downloads","description":"Total downloads in period","default":0},"time_series":{"items":{"$ref":"#/components/schemas/DownloadTimeSeriesPoint"},"type":"array","title":"Time Series","description":"Time series data for charting"},"by_source":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Source","description":"Downloads by source in period: gateway, sdk_pypi, extension_vscode"},"by_source_total":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Source Total","description":"All-time downloads by source for display cards"},"by_os":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Os","description":"Downloads by OS"},"by_country":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Country","description":"Downloads by country"}},"type":"object","required":["period","period_start","period_end"],"title":"DownloadStatsResponse"},"DownloadTimeSeriesPoint":{"properties":{"timestamp":{"type":"string","title":"Timestamp","description":"ISO timestamp"},"downloads":{"type":"integer","title":"Downloads","description":"Number of downloads","default":0},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source","description":"Product source (gateway, sdk_pypi, extension_vscode)"}},"type":"object","required":["timestamp"],"title":"DownloadTimeSeriesPoint"},"EmailCheckRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"EmailCheckRequest"},"EmailCheckResponse":{"properties":{"exists":{"type":"boolean","title":"Exists"}},"type":"object","required":["exists"],"title":"EmailCheckResponse"},"EmploymentType":{"type":"string","enum":["full_time","part_time","contract","intern"],"title":"EmploymentType"},"EnterpriseBillingResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"summary":{"$ref":"#/components/schemas/EnterpriseBillingSummary"},"keys":{"items":{"$ref":"#/components/schemas/EnterpriseKeyBilling"},"type":"array","title":"Keys"},"total":{"type":"integer","title":"Total","description":"Total enterprise keys","default":0}},"type":"object","title":"EnterpriseBillingResponse"},"EnterpriseBillingSummary":{"properties":{"total_paid":{"type":"number","title":"Total Paid","description":"Total paid invoices (all enterprise keys)","default":0.0},"total_unpaid":{"type":"number","title":"Total Unpaid","description":"Total unpaid invoices","default":0.0},"total_current_month":{"type":"number","title":"Total Current Month","description":"Current month usage (not yet invoiced)","default":0.0},"paid_invoice_count":{"type":"integer","title":"Paid Invoice Count","description":"Number of paid invoices","default":0},"unpaid_invoice_count":{"type":"integer","title":"Unpaid Invoice Count","description":"Number of unpaid invoices","default":0},"active_enterprise_keys":{"type":"integer","title":"Active Enterprise Keys","description":"Number of active enterprise keys","default":0}},"type":"object","title":"EnterpriseBillingSummary"},"EnterpriseBudgetResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"api_key_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key Id","description":"API key UUID"},"api_key_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key Name","description":"API key name"},"monthly_budget_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Monthly Budget Usd","description":"Monthly budget (null = unlimited)"},"current_month_usage_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Current Month Usage Usd","description":"Current month's usage"},"budget_utilization_percent":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Budget Utilization Percent","description":"Percentage of budget used (null if no budget)"},"is_over_budget":{"type":"boolean","title":"Is Over Budget","description":"Whether current usage exceeds budget","default":false}},"type":"object","title":"EnterpriseBudgetResponse"},"EnterpriseBudgetUpdate":{"properties":{"api_key_id":{"type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$","title":"Api Key Id","description":"API key UUID to update"},"monthly_budget_usd":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Monthly Budget Usd","description":"Monthly budget in USD. Set to null/None to remove budget (unlimited)."}},"type":"object","required":["api_key_id"],"title":"EnterpriseBudgetUpdate"},"EnterpriseInvoice":{"properties":{"id":{"type":"string","title":"Id","description":"Invoice record ID"},"api_key_id":{"type":"string","title":"Api Key Id","description":"API key ID"},"billing_month":{"type":"string","title":"Billing Month","description":"Billing month (YYYY-MM)"},"usage_usd":{"type":"number","title":"Usage Usd","description":"Usage amount for the month","default":0.0},"total_requests":{"type":"integer","title":"Total Requests","description":"Total requests in the month","default":0},"invoice_paid":{"type":"boolean","title":"Invoice Paid","description":"Whether invoice is paid","default":false},"invoice_generated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invoice Generated At","description":"When invoice was generated"},"paid_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Paid At","description":"When invoice was paid"}},"type":"object","required":["id","api_key_id","billing_month"],"title":"EnterpriseInvoice"},"EnterpriseKeyApprovalRequest":{"properties":{"action":{"type":"string","enum":["approve","decline"],"title":"Action","description":"Action: 'approve' or 'decline'"},"credit_limit_usd":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Credit Limit Usd","description":"Override credit limit for this key (only for approve action)"},"decline_reason":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Decline Reason","description":"Reason for declining (only for decline action)"}},"type":"object","required":["action"],"title":"EnterpriseKeyApprovalRequest"},"EnterpriseKeyApprovalResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"type":"string","title":"Message","description":"Result message"},"key_id":{"type":"string","title":"Key Id","description":"The key ID that was processed"},"new_status":{"type":"string","enum":["active","declined"],"title":"New Status","description":"New status: 'active' or 'declined'"}},"type":"object","required":["message","key_id","new_status"],"title":"EnterpriseKeyApprovalResponse"},"EnterpriseKeyBilling":{"properties":{"key_id":{"type":"string","title":"Key Id","description":"API key ID"},"key_name":{"type":"string","title":"Key Name","description":"Key display name"},"key_preview":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Key Preview","description":"Key preview (first 12 chars)"},"status":{"type":"string","title":"Status","description":"Key status: active, pending, revoked"},"created_at":{"type":"string","title":"Created At","description":"Key creation timestamp"},"user_id":{"type":"string","title":"User Id","description":"User ID who owns the key"},"user_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Email","description":"User email"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name","description":"Company name"},"credit_limit_usd":{"type":"number","title":"Credit Limit Usd","description":"Credit limit for this key","default":10000.0},"monthly_budget_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Monthly Budget Usd","description":"Monthly budget if set"},"total_paid":{"type":"number","title":"Total Paid","description":"Total paid invoices (all time)","default":0.0},"total_unpaid":{"type":"number","title":"Total Unpaid","description":"Total unpaid invoices","default":0.0},"current_month_usage":{"type":"number","title":"Current Month Usage","description":"Current month usage (not yet invoiced)","default":0.0},"paid_invoice_count":{"type":"integer","title":"Paid Invoice Count","description":"Number of paid invoices","default":0},"unpaid_invoice_count":{"type":"integer","title":"Unpaid Invoice Count","description":"Number of unpaid invoices","default":0},"invoices":{"items":{"$ref":"#/components/schemas/EnterpriseInvoice"},"type":"array","title":"Invoices","description":"All invoices for this key"},"category":{"type":"string","title":"Category","description":"admin | pilot | customer","default":"customer"}},"type":"object","required":["key_id","key_name","status","created_at","user_id"],"title":"EnterpriseKeyBilling"},"EnterpriseKeyUsage":{"properties":{"api_key_id":{"type":"string","title":"Api Key Id","description":"API key UUID"},"api_key_name":{"type":"string","title":"Api Key Name","description":"API key name","default":"Enterprise Key"},"scope":{"$ref":"#/components/schemas/APIKeyScope","description":"Key scope","default":"enterprise"},"billing_mode":{"type":"string","const":"postpaid","title":"Billing Mode","description":"Billing mode (postpaid)","default":"postpaid"},"current_balance_usd":{"type":"number","title":"Current Balance Usd","description":"Current balance/debt (USD)","default":0.0},"current_month_usage_usd":{"type":"number","title":"Current Month Usage Usd","description":"Current month usage (USD)","default":0.0},"credit_limit_usd":{"type":"number","title":"Credit Limit Usd","description":"Credit limit (USD)","default":10000.0},"credit_remaining_usd":{"type":"number","title":"Credit Remaining Usd","description":"Remaining credit (USD)","default":0.0},"monthly_budget_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Monthly Budget Usd","description":"Monthly spending budget"},"budget_utilization_percent":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Budget Utilization Percent","description":"Budget usage percentage"},"is_over_budget":{"type":"boolean","title":"Is Over Budget","description":"Whether over budget","default":false},"total_requests":{"type":"integer","title":"Total Requests","description":"Total requests (lifetime)","default":0},"current_month_requests":{"type":"integer","title":"Current Month Requests","description":"Requests in the current billing month","default":0},"last_used_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Used At","description":"Last used timestamp"}},"type":"object","required":["api_key_id"],"title":"EnterpriseKeyUsage","description":"Usage summary for enterprise (postpaid) API keys.\n\nEnterprise keys use a different billing model:\n- Prepaid (regular): User pays upfront, balance deducted from user_wallets\n- Postpaid (enterprise): Usage accumulated on key, invoiced monthly\n\nFor postpaid keys, current_balance_usd is negative (representing debt/usage).\nMonthly usage resets at the start of each month and is stored in history for invoicing."},"ErrorResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":false},"error":{"type":"string","title":"Error"},"code":{"type":"string","title":"Code"},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detail"},"retry_after":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Retry After"},"field":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Field"}},"type":"object","required":["error","code"],"title":"ErrorResponse"},"EstimateCostRequest":{"properties":{"compression_model":{"type":"string","title":"Compression Model","description":"Compression model to use","default":"latte_v1"},"input_tokens":{"type":"integer","exclusiveMinimum":0.0,"title":"Input Tokens","description":"Number of input tokens"},"compression_ratio":{"type":"number","exclusiveMaximum":1.0,"exclusiveMinimum":0.0,"title":"Compression Ratio","description":"Target compression ratio (e.g., 0.3)","default":0.5}},"type":"object","required":["input_tokens"],"title":"EstimateCostRequest"},"EstimateCostResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"$ref":"#/components/schemas/CostBreakdown"}},"type":"object","required":["data"],"title":"EstimateCostResponse"},"ExcludedPatternsResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"patterns":{"items":{"type":"string"},"type":"array","title":"Patterns","description":"Editable patterns stored in DB"},"hardcoded":{"items":{"type":"string"},"type":"array","title":"Hardcoded","description":"Built-in patterns that cannot be removed"},"env_patterns":{"items":{"type":"string"},"type":"array","title":"Env Patterns","description":"Patterns from STATS_EXCLUDED_EMAIL_PATTERNS env var (read-only)"}},"type":"object","title":"ExcludedPatternsResponse"},"FeatureRequest":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"subject":{"type":"string","title":"Subject"},"description":{"type":"string","title":"Description"},"status":{"type":"string","title":"Status"},"priority":{"type":"string","title":"Priority"},"admin_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin Notes"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"reviewed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Reviewed At"}},"type":"object","required":["id","email","subject","description","status","priority","created_at","updated_at"],"title":"FeatureRequest"},"FeatureRequestCreate":{"properties":{"email":{"type":"string","format":"email","title":"Email","description":"Email address"},"subject":{"type":"string","maxLength":255,"minLength":5,"title":"Subject","description":"Feature request subject/title"},"description":{"type":"string","maxLength":2000,"minLength":20,"title":"Description","description":"Detailed description of the feature request"}},"type":"object","required":["email","subject","description"],"title":"FeatureRequestCreate"},"FeatureRequestListResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"requests":{"items":{"$ref":"#/components/schemas/FeatureRequest"},"type":"array","title":"Requests","default":[]},"total":{"type":"integer","title":"Total","default":0},"pending_count":{"type":"integer","title":"Pending Count","default":0},"under_review_count":{"type":"integer","title":"Under Review Count","default":0},"planned_count":{"type":"integer","title":"Planned Count","default":0},"in_progress_count":{"type":"integer","title":"In Progress Count","default":0}},"type":"object","title":"FeatureRequestListResponse"},"FeatureRequestPriority":{"type":"string","enum":["low","normal","high","critical"],"title":"FeatureRequestPriority"},"FeatureRequestResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id","description":"Request ID (None on error)"},"email":{"type":"string","title":"Email","description":"Submitted email"},"subject":{"type":"string","title":"Subject","description":"Feature subject"}},"type":"object","required":["email","subject"],"title":"FeatureRequestResponse"},"FeatureRequestStatus":{"type":"string","enum":["pending","under_review","planned","in_progress","completed","declined"],"title":"FeatureRequestStatus"},"FeatureRequestUpdate":{"properties":{"status":{"anyOf":[{"$ref":"#/components/schemas/FeatureRequestStatus"},{"type":"null"}],"description":"New status"},"priority":{"anyOf":[{"$ref":"#/components/schemas/FeatureRequestPriority"},{"type":"null"}],"description":"Priority level"},"admin_notes":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Admin Notes","description":"Internal admin notes"}},"type":"object","title":"FeatureRequestUpdate"},"GatewayInstallListResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"installs":{"items":{"$ref":"#/components/schemas/GatewayInstallRecord"},"type":"array","title":"Installs"},"total":{"type":"integer","title":"Total","default":0}},"type":"object","title":"GatewayInstallListResponse"},"GatewayInstallRecord":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version"},"country_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country Code"},"region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"}},"type":"object","required":["id","created_at"],"title":"GatewayInstallRecord"},"GatewayInstallStatsResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"period":{"type":"string","title":"Period","description":"Time period (last_hour, last_day, last_week, etc.)"},"period_start":{"type":"string","title":"Period Start","description":"Start of period (ISO)"},"period_end":{"type":"string","title":"Period End","description":"End of period (ISO)"},"total_installs":{"type":"integer","title":"Total Installs","description":"Total number of installs in period"},"by_version":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Version","description":"Installs by version"},"top_countries":{"additionalProperties":{"type":"integer"},"type":"object","title":"Top Countries","description":"Top countries"}},"type":"object","required":["period","period_start","period_end","total_installs"],"title":"GatewayInstallStatsResponse"},"GatewayStatusResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"anyOf":[{"$ref":"#/components/schemas/GatewayStatusResult"},{"type":"null"}]}},"type":"object","title":"GatewayStatusResponse"},"GatewayStatusResult":{"properties":{"tier":{"type":"string","title":"Tier","description":"Rate-limit tier: tier1, tier2, tier3, tier4, tier5","default":"tier1"},"credits_remaining_usd":{"type":"number","title":"Credits Remaining Usd","description":"Total remaining credits (subscription + wallet) in USD","default":0.0},"credits_used_this_month":{"type":"number","title":"Credits Used This Month","description":"Credits used this billing month in USD","default":0.0},"monthly_budget_usd":{"type":"number","title":"Monthly Budget Usd","description":"Monthly budget/allocation in USD (0 = unlimited for admins)","default":0.0},"usage_percent":{"type":"number","title":"Usage Percent","description":"Percentage of monthly budget used (0-100)","default":0.0},"requests_today":{"type":"integer","title":"Requests Today","description":"Number of compression requests today","default":0},"requests_this_month":{"type":"integer","title":"Requests This Month","description":"Number of compression requests this billing month","default":0},"daily_request_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Daily Request Limit","description":"Daily request limit (None = unlimited)"},"is_admin":{"type":"boolean","title":"Is Admin","description":"Whether user has admin/unlimited access","default":false}},"type":"object","title":"GatewayStatusResult","description":"Usage status for Context-Gateway CLI display.\n\nProvides a lightweight summary for the gateway to display\nbalance and usage info to users during operation."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HealthResponse":{"properties":{"status":{"type":"string","title":"Status","description":"Service status"},"compression_server":{"type":"boolean","title":"Compression Server","description":"Whether compression server is available"}},"type":"object","required":["status","compression_server"],"title":"HealthResponse"},"HistoryBatchRequest":{"properties":{"inputs":{"items":{"$ref":"#/components/schemas/HistoryCompressRequest"},"type":"array","maxItems":100,"minItems":1,"title":"Inputs"}},"type":"object","required":["inputs"],"title":"HistoryBatchRequest"},"HistoryCompressRequest":{"properties":{"messages":{"items":{"$ref":"#/components/schemas/HistoryMessage"},"type":"array","maxItems":1000,"minItems":1,"title":"Messages","description":"Conversation history to compress (list of messages, REQUIRED, max 1000)"},"keep_recent":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Keep Recent","description":"Number of recent messages to keep uncompressed (default: 3)","default":3},"compression_model_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Compression Model Name","description":"Compression model to use. Defaults to DEFAULT_MODEL_HISTORY (hcc_latte_v1)."},"target_compression_ratio":{"type":"number","maximum":200.0,"minimum":0.0,"title":"Target Compression Ratio","description":"Target compression ratio: 0-1 (strength) or >1 for factor. Max 200. Default: 0.3","default":0.3},"source":{"anyOf":[{"$ref":"#/components/schemas/Source"},{"type":"null"}],"description":"Source of request: demo, extension, sdk:, gateway:"}},"type":"object","required":["messages"],"title":"HistoryCompressRequest","description":"Request to compress conversation history.\n\nThe service layer injects a default query when the resolved backbone\nrequires one (GemFilter), so callers never pass a query directly."},"HistoryCompressResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"anyOf":[{"$ref":"#/components/schemas/HistoryCompressResult"},{"type":"null"}]}},"type":"object","title":"HistoryCompressResponse"},"HistoryCompressResult":{"properties":{"summary":{"type":"string","title":"Summary","description":"Compressed history summary"},"original_tokens":{"type":"integer","title":"Original Tokens","description":"Token count of original history"},"compressed_tokens":{"type":"integer","title":"Compressed Tokens","description":"Token count of summary"},"messages_compressed":{"type":"integer","title":"Messages Compressed","description":"Number of messages that were compressed"},"messages_kept":{"type":"integer","title":"Messages Kept","description":"Number of recent messages kept"},"compression_ratio":{"type":"number","title":"Compression Ratio","description":"Actual compression ratio achieved"},"duration_ms":{"type":"integer","title":"Duration Ms","description":"Processing time in milliseconds","default":0}},"type":"object","required":["summary","original_tokens","compressed_tokens","messages_compressed","messages_kept","compression_ratio"],"title":"HistoryCompressResult"},"HistoryMessage":{"properties":{"role":{"type":"string","title":"Role","description":"Message role: 'user', 'assistant', 'system', or 'tool'"},"content":{"type":"string","title":"Content","description":"Message content"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Optional name for the message sender"},"tool_call_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Call Id","description":"Tool call ID for tool messages"}},"type":"object","required":["role","content"],"title":"HistoryMessage"},"IdentityManifest":{"properties":{"instance_id":{"type":"string","title":"Instance Id","description":"UUID matching /data/identity.json"},"api_key_hash":{"type":"string","pattern":"^[a-f0-9]{64}$","title":"Api Key Hash","description":"SHA-256 hex of the api_key the on-prem instance was first bound to"},"created_at":{"type":"string","title":"Created At","description":"ISO-8601 timestamp manifest was created"}},"additionalProperties":true,"type":"object","required":["instance_id","api_key_hash","created_at"],"title":"IdentityManifest","description":"On-prem identity manifest, sent in each upload for rebirth detection.\n\nThe on-prem instance persists this manifest in ``/data/identity.json``\nHMAC-bound to the api_key on first authenticated request. Subsequent\nuploads carry the same values. If we see a *new* ``instance_id`` or an\nearlier ``created_at`` for the same api_key, it signals that the operator\ndeleted the local manifest — typically an attempt to reset a per-instance\ngrace period or quota."},"Invoice":{"properties":{"id":{"type":"string","title":"Id","description":"Invoice UUID"},"invoice_type":{"$ref":"#/components/schemas/InvoiceType","description":"Invoice type","default":"enterprise"},"billing_month":{"type":"string","title":"Billing Month","description":"Billing month (YYYY-MM)"},"amount_usd":{"type":"number","title":"Amount Usd","description":"Invoice amount in USD"},"status":{"$ref":"#/components/schemas/InvoiceStatus","description":"Payment status"},"stripe_invoice_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Invoice Id","description":"Stripe invoice ID"},"invoice_pdf_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invoice Pdf Url","description":"PDF download URL"},"created_at":{"type":"string","title":"Created At","description":"Invoice creation timestamp"},"paid_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Paid At","description":"Payment timestamp"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Invoice description"},"api_key_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key Name","description":"API key name (for enterprise)"},"can_pay":{"type":"boolean","title":"Can Pay","description":"Whether user can pay this invoice now","default":false}},"type":"object","required":["id","billing_month","amount_usd","status","created_at"],"title":"Invoice"},"InvoiceListResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"items":{"$ref":"#/components/schemas/Invoice"},"type":"array","title":"Data","default":[]},"total_pending_usd":{"type":"number","title":"Total Pending Usd","description":"Total pending amount","default":0.0}},"type":"object","title":"InvoiceListResponse"},"InvoicePaymentRequest":{"properties":{"billing_month":{"type":"string","title":"Billing Month","description":"Billing month to pay (YYYY-MM)"}},"type":"object","required":["billing_month"],"title":"InvoicePaymentRequest"},"InvoicePaymentResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url","description":"Stripe Checkout URL"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id","description":"Stripe session ID"},"amount_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Amount Usd","description":"Amount to pay"}},"type":"object","title":"InvoicePaymentResponse"},"InvoiceStatus":{"type":"string","enum":["draft","pending","paid","failed"],"title":"InvoiceStatus"},"InvoiceType":{"type":"string","enum":["enterprise"],"title":"InvoiceType","description":"Invoice types — enterprise postpaid only.\n\nPrepaid wallet top-ups are 'transactions', not invoices."},"Job":{"properties":{"slug":{"type":"string","maxLength":100,"minLength":2,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","title":"Slug"},"title":{"type":"string","maxLength":200,"minLength":2,"title":"Title"},"department":{"type":"string","maxLength":100,"minLength":1,"title":"Department"},"location":{"type":"string","maxLength":200,"minLength":1,"title":"Location"},"workplace_type":{"$ref":"#/components/schemas/WorkplaceType","default":"onsite"},"employment_type":{"$ref":"#/components/schemas/EmploymentType","default":"full_time"},"description":{"type":"string","maxLength":50000,"title":"Description","default":""},"application_questions":{"items":{"$ref":"#/components/schemas/ApplicationQuestion"},"type":"array","title":"Application Questions"},"id":{"type":"string","format":"uuid","title":"Id"},"status":{"$ref":"#/components/schemas/JobStatus"},"published_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Published At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["slug","title","department","location","id","status","created_at","updated_at"],"title":"Job","description":"Full job record — admin view (includes drafts + timestamps)."},"JobAdminListResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"jobs":{"items":{"$ref":"#/components/schemas/Job"},"type":"array","title":"Jobs"},"total":{"type":"integer","title":"Total","default":0}},"type":"object","title":"JobAdminListResponse"},"JobApplication":{"properties":{"full_name":{"type":"string","maxLength":200,"minLength":1,"title":"Full Name"},"email":{"type":"string","format":"email","title":"Email"},"linkedin_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Linkedin Url"},"custom_answers":{"additionalProperties":true,"type":"object","title":"Custom Answers"},"id":{"type":"string","format":"uuid","title":"Id"},"job_id":{"type":"string","format":"uuid","title":"Job Id"},"cv_storage_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cv Storage Path"},"cv_filename":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cv Filename"},"cv_mime":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cv Mime"},"cv_size_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cv Size Bytes"},"status":{"$ref":"#/components/schemas/ApplicationStatus"},"admin_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin Notes"},"applied_at":{"type":"string","format":"date-time","title":"Applied At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["full_name","email","id","job_id","status","applied_at","updated_at"],"title":"JobApplication"},"JobApplicationListResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"applications":{"items":{"$ref":"#/components/schemas/JobApplication"},"type":"array","title":"Applications"},"total":{"type":"integer","title":"Total","default":0}},"type":"object","title":"JobApplicationListResponse"},"JobApplicationSubmitResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"email":{"type":"string","title":"Email"},"job_slug":{"type":"string","title":"Job Slug"}},"type":"object","required":["email","job_slug"],"title":"JobApplicationSubmitResponse"},"JobApplicationUpdate":{"properties":{"status":{"anyOf":[{"$ref":"#/components/schemas/ApplicationStatus"},{"type":"null"}]},"admin_notes":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}],"title":"Admin Notes"}},"type":"object","title":"JobApplicationUpdate"},"JobCreate":{"properties":{"slug":{"type":"string","maxLength":100,"minLength":2,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","title":"Slug"},"title":{"type":"string","maxLength":200,"minLength":2,"title":"Title"},"department":{"type":"string","maxLength":100,"minLength":1,"title":"Department"},"location":{"type":"string","maxLength":200,"minLength":1,"title":"Location"},"workplace_type":{"$ref":"#/components/schemas/WorkplaceType","default":"onsite"},"employment_type":{"$ref":"#/components/schemas/EmploymentType","default":"full_time"},"description":{"type":"string","maxLength":50000,"title":"Description","default":""},"application_questions":{"items":{"$ref":"#/components/schemas/ApplicationQuestion"},"type":"array","title":"Application Questions"},"status":{"$ref":"#/components/schemas/JobStatus","default":"draft"}},"type":"object","required":["slug","title","department","location"],"title":"JobCreate"},"JobListResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"jobs":{"items":{"$ref":"#/components/schemas/JobPublicResponse"},"type":"array","title":"Jobs"},"total":{"type":"integer","title":"Total","default":0}},"type":"object","title":"JobListResponse"},"JobPublicResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"slug":{"type":"string","title":"Slug"},"title":{"type":"string","title":"Title"},"department":{"type":"string","title":"Department"},"location":{"type":"string","title":"Location"},"workplace_type":{"$ref":"#/components/schemas/WorkplaceType"},"employment_type":{"$ref":"#/components/schemas/EmploymentType"},"description":{"type":"string","title":"Description","default":""},"application_questions":{"items":{"$ref":"#/components/schemas/ApplicationQuestion"},"type":"array","title":"Application Questions"},"published_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Published At"}},"type":"object","required":["id","slug","title","department","location","workplace_type","employment_type"],"title":"JobPublicResponse","description":"Public job view — safe to expose to anonymous visitors."},"JobStatus":{"type":"string","enum":["draft","published","closed"],"title":"JobStatus"},"JobUpdate":{"properties":{"slug":{"anyOf":[{"type":"string","maxLength":100,"minLength":2,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},{"type":"null"}],"title":"Slug"},"title":{"anyOf":[{"type":"string","maxLength":200,"minLength":2},{"type":"null"}],"title":"Title"},"department":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Department"},"location":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Location"},"workplace_type":{"anyOf":[{"$ref":"#/components/schemas/WorkplaceType"},{"type":"null"}]},"employment_type":{"anyOf":[{"$ref":"#/components/schemas/EmploymentType"},{"type":"null"}]},"description":{"anyOf":[{"type":"string","maxLength":50000},{"type":"null"}],"title":"Description"},"application_questions":{"anyOf":[{"items":{"$ref":"#/components/schemas/ApplicationQuestion"},"type":"array"},{"type":"null"}],"title":"Application Questions"},"status":{"anyOf":[{"$ref":"#/components/schemas/JobStatus"},{"type":"null"}]}},"type":"object","title":"JobUpdate"},"LogoutResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"revoked_key_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Revoked Key Id"},"message":{"type":"string","title":"Message"}},"type":"object","required":["success","message"],"title":"LogoutResponse"},"MRRDataPoint":{"properties":{"month":{"type":"string","title":"Month"},"prepaid":{"type":"number","title":"Prepaid","default":0.0},"enterprise":{"type":"number","title":"Enterprise","default":0.0},"total":{"type":"number","title":"Total","default":0.0}},"type":"object","required":["month"],"title":"MRRDataPoint"},"MessageResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"type":"string","title":"Message"}},"type":"object","required":["message"],"title":"MessageResponse"},"ModelStats":{"properties":{"model":{"type":"string","title":"Model"},"requests":{"type":"integer","title":"Requests","default":0},"tokens":{"type":"integer","title":"Tokens","default":0},"cost_usd":{"type":"number","title":"Cost Usd","default":0.0}},"type":"object","required":["model"],"title":"ModelStats"},"ModelStatsItem":{"properties":{"model":{"type":"string","title":"Model","description":"Model name"},"requests":{"type":"integer","title":"Requests","description":"Number of requests","default":0},"input_tokens":{"type":"integer","title":"Input Tokens","description":"Original input tokens","default":0},"compressed_input_tokens":{"type":"integer","title":"Compressed Input Tokens","description":"Compressed input tokens","default":0},"output_tokens":{"type":"integer","title":"Output Tokens","description":"Output tokens","default":0},"cost_usd":{"type":"number","title":"Cost Usd","description":"Cost in USD","default":0.0}},"type":"object","required":["model"],"title":"ModelStatsItem"},"MoneyUploadRequest":{"properties":{"amount_usd":{"type":"number","maximum":10000.0,"exclusiveMinimum":0.0,"title":"Amount Usd","description":"Amount to upload in USD (max $10,000)"},"payment_method_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Method Id","description":"Stripe payment method ID"},"target_user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target User Id","description":"User ID to credit (admin only). Defaults to admin's own account if omitted."},"idempotency_key":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Idempotency Key","description":"Caller-supplied idempotency key to prevent double-credits on retry"}},"type":"object","required":["amount_usd"],"title":"MoneyUploadRequest"},"MoneyUploadResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"anyOf":[{"$ref":"#/components/schemas/Transaction"},{"type":"null"}]},"new_balance":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"New Balance"}},"type":"object","title":"MoneyUploadResponse"},"NewsletterListResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"subscribers":{"items":{"$ref":"#/components/schemas/NewsletterSubscriber"},"type":"array","title":"Subscribers","default":[]},"total_active":{"type":"integer","title":"Total Active","default":0},"total_unsubscribed":{"type":"integer","title":"Total Unsubscribed","default":0}},"type":"object","title":"NewsletterListResponse"},"NewsletterStatusResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"email":{"type":"string","title":"Email"},"status":{"type":"string","title":"Status"},"subscribed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Subscribed At"},"unsubscribed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Unsubscribed At"}},"type":"object","required":["email","status"],"title":"NewsletterStatusResponse"},"NewsletterSubscribeRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email","description":"Email address to subscribe"},"source":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Source","description":"Source of subscription","default":"landing_page"}},"type":"object","required":["email"],"title":"NewsletterSubscribeRequest"},"NewsletterSubscribeResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"email":{"type":"string","title":"Email","description":"Subscribed email address"},"already_subscribed":{"type":"boolean","title":"Already Subscribed","description":"Whether email was already subscribed","default":false}},"type":"object","required":["email"],"title":"NewsletterSubscribeResponse"},"NewsletterSubscriber":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"status":{"type":"string","title":"Status"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"subscribed_at":{"type":"string","format":"date-time","title":"Subscribed At"},"unsubscribed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Unsubscribed At"}},"type":"object","required":["id","email","status","subscribed_at"],"title":"NewsletterSubscriber"},"NewsletterUnsubscribeRequest":{"properties":{"token":{"type":"string","format":"uuid","title":"Token","description":"Unsubscribe token from email link"}},"type":"object","required":["token"],"title":"NewsletterUnsubscribeRequest"},"NewsletterUnsubscribeResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"email":{"type":"string","title":"Email","description":"Unsubscribed email address"}},"type":"object","required":["email"],"title":"NewsletterUnsubscribeResponse"},"PaymentReceipt":{"properties":{"id":{"type":"string","title":"Id"},"receipt_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Receipt Number"},"amount_usd":{"type":"number","title":"Amount Usd","description":"Payment amount in USD"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"status":{"type":"string","enum":["completed","pending","failed","refunded"],"title":"Status","description":"completed, pending, failed, refunded"},"stripe_payment_intent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Payment Intent Id"},"stripe_invoice_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Invoice Id"},"invoice_pdf_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invoice Pdf Url","description":"Stripe invoice PDF download URL"},"payment_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Method"},"payment_method_last4":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Method Last4"},"paid_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Paid At"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","amount_usd","status","created_at"],"title":"PaymentReceipt"},"PaymentReceiptsResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"items":{"$ref":"#/components/schemas/PaymentReceipt"},"type":"array","title":"Data","default":[]}},"type":"object","title":"PaymentReceiptsResponse"},"PendingEnterpriseKey":{"properties":{"id":{"type":"string","title":"Id","description":"API key ID"},"user_id":{"type":"string","title":"User Id","description":"User ID who requested the key"},"user_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Email","description":"User's email"},"name":{"type":"string","title":"Name","description":"Key display name"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name","description":"Company name"},"request_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Message","description":"Reason for requesting enterprise access"},"expected_monthly_usage":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Expected Monthly Usage","description":"Expected monthly usage in USD"},"credit_limit_usd":{"type":"number","title":"Credit Limit Usd","description":"Credit limit for this key","default":10000.0},"created_at":{"type":"string","title":"Created At","description":"Request creation timestamp"}},"type":"object","required":["id","user_id","name","created_at"],"title":"PendingEnterpriseKey"},"PendingEnterpriseKeysResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"data":{"items":{"$ref":"#/components/schemas/PendingEnterpriseKey"},"type":"array","title":"Data"},"total":{"type":"integer","title":"Total","description":"Total pending keys","default":0}},"type":"object","title":"PendingEnterpriseKeysResponse"},"Profile":{"properties":{"user_id":{"type":"string","title":"User Id"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"role":{"type":"string","enum":["user","admin","support"],"title":"Role","default":"user"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"account_type":{"$ref":"#/components/schemas/AccountType","default":"user"},"tier":{"$ref":"#/components/schemas/TierName","default":"tier1"},"extra_usage_enabled":{"type":"boolean","title":"Extra Usage Enabled","default":true},"extra_usage_limit":{"type":"number","title":"Extra Usage Limit","default":0.0},"wallet_balance":{"type":"number","title":"Wallet Balance","default":0.0},"lifetime_deposited":{"type":"number","title":"Lifetime Deposited","default":0.0},"lifetime_used":{"type":"number","title":"Lifetime Used","default":0.0},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"is_admin":{"type":"boolean","title":"Is Admin","readOnly":true}},"type":"object","required":["user_id","is_admin"],"title":"Profile","description":"User profile data aggregated from multiple tables.\n\nData sources (after M_14 migration):\n- user_profiles: user_id, full_name, company_name, country, role\n- user_subscriptions: tier (tier1-tier5 based on usage)\n- user_wallets: balance_usd, lifetime totals\n\nNote: Enterprise status is determined by active enterprise API tokens,\nnot the plan column (which is no longer used)."},"ProfileCreateRequest":{"properties":{"account_type":{"anyOf":[{"$ref":"#/components/schemas/AccountType"},{"type":"null"}],"description":"Account type selected at onboarding: 'user' (prepaid) or 'enterprise' (postpaid)"}},"additionalProperties":false,"type":"object","title":"ProfileCreateRequest"},"ProfileResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"anyOf":[{"$ref":"#/components/schemas/Profile"},{"type":"null"}]}},"type":"object","title":"ProfileResponse"},"ProfileUpdateRequest":{"properties":{"full_name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Full Name","description":"User's full name"},"company_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Company Name","description":"Company name"},"country":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Country","description":"Country"},"extra_usage_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Extra Usage Enabled","description":"Enable extra usage (use wallet balance when subscription credits exhausted)"},"extra_usage_limit":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Extra Usage Limit","description":"Spending limit for extra wallet usage in USD (max $100)"}},"type":"object","title":"ProfileUpdateRequest","description":"Request to update profile.\n\nNote: subscription-related fields (extra_usage_*) are now in user_subscriptions\nbut can still be updated via this endpoint for convenience."},"ProfileUpdateResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"anyOf":[{"$ref":"#/components/schemas/Profile"},{"type":"null"}]}},"type":"object","title":"ProfileUpdateResponse"},"QuerySpecificCompressionBatchInput":{"properties":{"context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Context","description":"Context text to compress. If null or empty, the corresponding result has compressed_context='' with zero tokens and is not billed."},"query":{"type":"string","minLength":1,"title":"Query","description":"Query for this context (REQUIRED)"}},"type":"object","required":["query"],"title":"QuerySpecificCompressionBatchInput"},"QuerySpecificCompressionBatchRequest":{"properties":{"inputs":{"items":{"$ref":"#/components/schemas/QuerySpecificCompressionBatchInput"},"type":"array","maxItems":100,"minItems":1,"title":"Inputs","description":"List of inputs to compress"},"compression_model_name":{"type":"string","title":"Compression Model Name","description":"Compression model to use"},"target_compression_ratio":{"anyOf":[{"type":"number","maximum":200.0,"minimum":0.0},{"type":"null"}],"title":"Target Compression Ratio","description":"Target ratio: 0-1 (strength) or >1 for factor. Max 200."},"coarse":{"type":"boolean","title":"Coarse","description":"Use coarse-grained compression (paragraph-level). Applies to all items. Default: True.","default":true},"dynamic":{"type":"boolean","title":"Dynamic","description":"latte_v2 only. Use Kneedle elbow selection instead of a fixed ratio; overrides target_compression_ratio when True.","default":false},"dynamic_min_ratio":{"anyOf":[{"type":"number","minimum":1.0},{"type":"null"}],"title":"Dynamic Min Ratio","description":"latte_v2 only. Floor on compression when dynamic=True."},"dynamic_max_ratio":{"anyOf":[{"type":"number","minimum":1.0},{"type":"null"}],"title":"Dynamic Max Ratio","description":"latte_v2 only. Ceiling on compression when dynamic=True."},"source":{"anyOf":[{"$ref":"#/components/schemas/Source"},{"type":"null"}],"description":"Source of request: demo, extension, sdk:, gateway:"}},"type":"object","required":["inputs","compression_model_name"],"title":"QuerySpecificCompressionBatchRequest","description":"Batch request for question-specific compression (per-item context+query pairs).\n\nEach input has its own context and query. Use this when you need different\nqueries for different contexts."},"QuerySpecificCompressionBatchResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"anyOf":[{"$ref":"#/components/schemas/QuerySpecificCompressionBatchResult"},{"type":"null"}]}},"type":"object","title":"QuerySpecificCompressionBatchResponse"},"QuerySpecificCompressionBatchResult":{"properties":{"total_original_tokens":{"type":"integer","title":"Total Original Tokens","default":0},"total_compressed_tokens":{"type":"integer","title":"Total Compressed Tokens","default":0},"total_tokens_saved":{"type":"integer","title":"Total Tokens Saved","default":0},"average_compression_ratio":{"type":"number","title":"Average Compression Ratio","default":0.0},"count":{"type":"integer","title":"Count","default":0},"results":{"items":{"$ref":"#/components/schemas/CompressionResult"},"type":"array","title":"Results"}},"type":"object","title":"QuerySpecificCompressionBatchResult"},"QuerySpecificCompressionRequest":{"properties":{"context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Context","description":"Context text to compress (single string). If null or empty, the endpoint returns an empty compressed_context with zero tokens and no billing — no error is raised."},"compression_model_name":{"type":"string","title":"Compression Model Name","description":"Compression model to use (e.g., 'latte_v1')"},"query":{"type":"string","minLength":1,"title":"Query","description":"Query for context-aware filtering (REQUIRED)"},"target_compression_ratio":{"anyOf":[{"type":"number","maximum":200.0,"minimum":0.0},{"type":"null"}],"title":"Target Compression Ratio","description":"Target ratio: 0-1 (strength) or >1 for factor (e.g., 2=2x). Max 200."},"coarse":{"type":"boolean","title":"Coarse","description":"Use coarse-grained compression (paragraph-level). Default: True.","default":true},"heuristic_chunking":{"type":"boolean","title":"Heuristic Chunking","description":"Use heuristic chunking for better structure preservation. Default: False.","default":false},"disable_placeholders":{"type":"boolean","title":"Disable Placeholders","description":"Disable placeholder tokens in compressed output. Default: False.","default":false},"dynamic":{"type":"boolean","title":"Dynamic","description":"latte_v2 only. Use Kneedle elbow selection instead of a fixed ratio; overrides target_compression_ratio when True.","default":false},"dynamic_min_ratio":{"anyOf":[{"type":"number","minimum":1.0},{"type":"null"}],"title":"Dynamic Min Ratio","description":"latte_v2 only. Floor on compression when dynamic=True."},"dynamic_max_ratio":{"anyOf":[{"type":"number","minimum":1.0},{"type":"null"}],"title":"Dynamic Max Ratio","description":"latte_v2 only. Ceiling on compression when dynamic=True."},"source":{"anyOf":[{"$ref":"#/components/schemas/Source"},{"type":"null"}],"description":"Source of request: demo, extension, sdk:, gateway:"}},"type":"object","required":["compression_model_name","query"],"title":"QuerySpecificCompressionRequest","description":"Request for single question-specific compression.\n\nUse /batch endpoint for multiple context+query pairs.\nBackbone: GemFilter"},"QuerySpecificCompressionResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"anyOf":[{"$ref":"#/components/schemas/CompressionResult"},{"type":"null"}]}},"type":"object","title":"QuerySpecificCompressionResponse"},"RateLimits":{"properties":{"tier":{"$ref":"#/components/schemas/TierName","description":"Tier name"},"rpm":{"type":"integer","title":"Rpm","description":"Requests per minute (-1 = unlimited)"},"tpm":{"type":"integer","title":"Tpm","description":"Tokens per minute (-1 = unlimited)"},"rpd":{"type":"integer","title":"Rpd","description":"Requests per day (-1 = unlimited)"},"max_api_keys":{"type":"integer","title":"Max Api Keys","description":"Max API keys (-1 = unlimited)"}},"type":"object","required":["tier","rpm","tpm","rpd","max_api_keys"],"title":"RateLimits"},"RateLimitsResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"anyOf":[{"$ref":"#/components/schemas/RateLimits"},{"type":"null"}]}},"type":"object","title":"RateLimitsResponse"},"RegisterSigningSecretRequest":{"properties":{"signing_secret":{"type":"string","title":"Signing Secret","description":"On-prem signing secret (opm_xxx). Mint via dashboard -> Settings -> On-Prem. cmp_ API keys are rejected."},"instance_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instance Id","description":"Instance identifier"}},"type":"object","required":["signing_secret"],"title":"RegisterSigningSecretRequest"},"RegisterSigningSecretResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"}},"type":"object","required":["success","message"],"title":"RegisterSigningSecretResponse"},"RemoveExcludedPatternRequest":{"properties":{"pattern":{"type":"string","title":"Pattern","description":"Pattern to remove"}},"type":"object","required":["pattern"],"title":"RemoveExcludedPatternRequest"},"RevenueBreakdown":{"properties":{"prepaid_total":{"type":"number","title":"Prepaid Total","default":0.0},"prepaid_in_period":{"type":"number","title":"Prepaid In Period","default":0.0},"enterprise_invoiced_total":{"type":"number","title":"Enterprise Invoiced Total","default":0.0},"enterprise_invoiced_in_period":{"type":"number","title":"Enterprise Invoiced In Period","default":0.0},"enterprise_paid_total":{"type":"number","title":"Enterprise Paid Total","default":0.0},"enterprise_paid_in_period":{"type":"number","title":"Enterprise Paid In Period","default":0.0},"enterprise_pending_total":{"type":"number","title":"Enterprise Pending Total","default":0.0},"enterprise_pending_in_period":{"type":"number","title":"Enterprise Pending In Period","default":0.0},"enterprise_unbilled":{"type":"number","title":"Enterprise Unbilled","default":0.0},"prepaid_mtd":{"type":"number","title":"Prepaid Mtd","default":0.0},"enterprise_mtd":{"type":"number","title":"Enterprise Mtd","default":0.0},"total_mtd":{"type":"number","title":"Total Mtd","default":0.0},"prepaid_time_series":{"items":{"$ref":"#/components/schemas/RevenueDataPoint"},"type":"array","title":"Prepaid Time Series"},"enterprise_time_series":{"items":{"$ref":"#/components/schemas/RevenueDataPoint"},"type":"array","title":"Enterprise Time Series"},"enterprise_daily_time_series":{"items":{"$ref":"#/components/schemas/RevenueDataPoint"},"type":"array","title":"Enterprise Daily Time Series"},"unbilled_time_series":{"items":{"$ref":"#/components/schemas/RevenueDataPoint"},"type":"array","title":"Unbilled Time Series"},"mrr_trend":{"items":{"$ref":"#/components/schemas/MRRDataPoint"},"type":"array","title":"Mrr Trend"}},"type":"object","title":"RevenueBreakdown"},"RevenueDataPoint":{"properties":{"timestamp":{"type":"string","title":"Timestamp"},"amount":{"type":"number","title":"Amount","default":0.0}},"type":"object","required":["timestamp"],"title":"RevenueDataPoint"},"RevokedKeysSummary":{"properties":{"count":{"type":"integer","title":"Count","default":0},"total_requests_all_time":{"type":"integer","title":"Total Requests All Time","default":0},"total_requests_this_month":{"type":"number","title":"Total Requests This Month","default":0.0},"total_usage_this_month_usd":{"type":"number","title":"Total Usage This Month Usd","default":0.0},"latest_revoked_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Latest Revoked At"}},"type":"object","title":"RevokedKeysSummary"},"RoleResponse":{"properties":{"role":{"type":"string","title":"Role","description":"User role: user, admin, support"},"is_admin":{"type":"boolean","title":"Is Admin","description":"Whether user is admin or support"},"account_type":{"type":"string","title":"Account Type","description":"Account type: user or enterprise"}},"type":"object","required":["role","is_admin","account_type"],"title":"RoleResponse"},"SampleText":{"properties":{"name":{"type":"string","title":"Name"},"text":{"type":"string","title":"Text"}},"type":"object","required":["name","text"],"title":"SampleText"},"ScaleTierLimits":{"properties":{"tier":{"type":"string","title":"Tier"},"rate_limits":{"$ref":"#/components/schemas/TierRateLimits"}},"type":"object","required":["tier","rate_limits"],"title":"ScaleTierLimits"},"Source":{"type":"string","enum":["demo","extension","sdk:python","sdk:typescript","sdk:curl","gateway:unknown","gateway:anthropic","gateway:openai","gateway:gemini","integration:litellm","integration:hermes"],"title":"Source","description":"Source of an API request.\n\nFormat: source[:detail]\n- demo, extension: no detail needed\n- sdk:python, sdk:typescript, sdk:curl\n- gateway:anthropic, gateway:openai, gateway:gemini\n- integration:litellm, integration:hermes"},"TelemetryBatchRequest":{"properties":{"batch_id":{"type":"string","title":"Batch Id","description":"Unique batch ID (UUID)"},"instance_id":{"type":"string","title":"Instance Id","description":"On-prem instance ID (UUID)"},"events":{"items":{"$ref":"#/components/schemas/TelemetryEvent"},"type":"array","maxItems":100,"minItems":1,"title":"Events","description":"List of telemetry events (max 100 per batch)"},"identity":{"anyOf":[{"$ref":"#/components/schemas/IdentityManifest"},{"type":"null"}],"description":"Signed on-prem identity manifest. Optional — older on-prem builds (< 1.1.0) don't send it. When present, the platform logs identity changes (instance_id or created_at moving) for audit. Future versions will block on mismatch."},"signing_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signing Secret","description":"Signing secret for HMAC verification (include on first request only)"}},"additionalProperties":true,"type":"object","required":["batch_id","instance_id","events"],"title":"TelemetryBatchRequest"},"TelemetryBatchResponse":{"properties":{"success":{"type":"boolean","title":"Success","description":"Whether batch was accepted"},"batch_id":{"type":"string","title":"Batch Id","description":"Echo of batch ID"},"events_received":{"type":"integer","title":"Events Received","description":"Number of events received"},"events_stored":{"type":"integer","title":"Events Stored","description":"Number of events stored"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"Additional message"}},"type":"object","required":["success","batch_id","events_received","events_stored"],"title":"TelemetryBatchResponse"},"TelemetryErrorResponse":{"properties":{"success":{"type":"boolean","title":"Success","description":"Always false for errors","default":false},"error":{"type":"string","title":"Error","description":"Error message"},"error_code":{"type":"string","title":"Error Code","description":"Error code for debugging"}},"type":"object","required":["error","error_code"],"title":"TelemetryErrorResponse"},"TelemetryEvent":{"properties":{"event_id":{"type":"string","title":"Event Id","description":"Unique event ID (UUID)"},"timestamp":{"type":"string","title":"Timestamp","description":"Event timestamp (ISO8601)"},"event_type":{"type":"string","title":"Event Type","description":"Event type (compression, error, startup, shutdown)"},"model_name":{"type":"string","title":"Model Name","description":"Compression model used"},"original_tokens":{"type":"integer","maximum":1000000.0,"minimum":0.0,"title":"Original Tokens","description":"Original token count","default":0},"compressed_tokens":{"type":"integer","maximum":1000000.0,"minimum":0.0,"title":"Compressed Tokens","description":"Compressed token count","default":0},"tokens_saved":{"type":"integer","maximum":1000000.0,"minimum":0.0,"title":"Tokens Saved","description":"Tokens saved (original - compressed)","default":0},"duration_ms":{"type":"integer","maximum":3600000.0,"minimum":0.0,"title":"Duration Ms","description":"Processing duration in milliseconds (max 1h)","default":0},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata","description":"Additional metadata (max 10KB, 50 keys, 3 levels deep)"},"event_hmac":{"anyOf":[{"type":"string","pattern":"^[a-f0-9]{64}$"},{"type":"null"}],"title":"Event Hmac","description":"Per-event HMAC-SHA256(api_key, canonical_event_bytes) computed by on-prem at insert time. Optional — older on-prem builds don't send it. The platform rejects events whose tag doesn't verify."}},"additionalProperties":true,"type":"object","required":["event_id","timestamp","event_type","model_name"],"title":"TelemetryEvent","description":"Single telemetry event from on-prem instance.\n\nThe optional ``event_hmac`` field is the per-event integrity tag computed\nby the on-prem instance at insert time using HMAC-SHA256(api_key, canonical_event_bytes).\nOlder on-prem builds (< 1.1.0) don't send it; newer builds always do. The\nplatform verifies it server-side and rejects events with a bad tag —\nclosing the in-flight SQLite tamper window."},"TierInfo":{"properties":{"name":{"type":"string","title":"Name","description":"Tier identifier: tier1, tier2, tier3, tier4, tier5"},"display_name":{"type":"string","title":"Display Name","description":"Human-readable tier name"},"min_monthly_tokens":{"type":"integer","title":"Min Monthly Tokens","description":"Minimum monthly compressed tokens to reach this tier"},"max_api_keys":{"type":"integer","title":"Max Api Keys","description":"Maximum API keys allowed"},"rate_limits":{"$ref":"#/components/schemas/TierRateLimits"}},"type":"object","required":["name","display_name","min_monthly_tokens","max_api_keys","rate_limits"],"title":"TierInfo"},"TierName":{"type":"string","enum":["tier1","tier2","tier3","tier4","tier5"],"title":"TierName"},"TierRateLimits":{"properties":{"rpm":{"type":"integer","title":"Rpm","description":"Requests Per Minute"},"tpm":{"type":"integer","title":"Tpm","description":"Tokens Per Minute"},"rpd":{"type":"integer","title":"Rpd","description":"Requests Per Day"}},"type":"object","required":["rpm","tpm","rpd"],"title":"TierRateLimits"},"TiersResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"tiers":{"items":{"$ref":"#/components/schemas/TierInfo"},"type":"array","title":"Tiers","default":[]},"scale_limits":{"additionalProperties":{"items":{"$ref":"#/components/schemas/ScaleTierLimits"},"type":"array"},"type":"object","title":"Scale Limits","default":{}}},"type":"object","title":"TiersResponse"},"TimeSeriesDataPoint":{"properties":{"timestamp":{"type":"string","title":"Timestamp","description":"ISO timestamp"},"requests":{"type":"integer","title":"Requests","description":"Number of requests","default":0},"input_tokens":{"type":"integer","title":"Input Tokens","description":"Original input tokens","default":0},"compressed_input_tokens":{"type":"integer","title":"Compressed Input Tokens","description":"Compressed input tokens","default":0},"output_tokens":{"type":"integer","title":"Output Tokens","description":"Output tokens","default":0},"cost_usd":{"type":"number","title":"Cost Usd","description":"Cost in USD","default":0.0},"savings_usd":{"type":"number","title":"Savings Usd","description":"Savings in USD","default":0.0}},"type":"object","required":["timestamp"],"title":"TimeSeriesDataPoint"},"TokenCountRequest":{"properties":{"prompt":{"type":"string","maxLength":100000,"minLength":1,"title":"Prompt","description":"Text to count"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model","description":"Model for tokenizer"}},"type":"object","required":["prompt"],"title":"TokenCountRequest"},"TokenCountResponse":{"properties":{"tokens":{"type":"integer","title":"Tokens"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"}},"type":"object","required":["tokens"],"title":"TokenCountResponse"},"TokenResponse":{"properties":{"access_token":{"type":"string","title":"Access Token"},"refresh_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Refresh Token"},"token_type":{"type":"string","title":"Token Type","default":"Bearer"},"expires_in":{"type":"integer","title":"Expires In"},"scope":{"type":"string","title":"Scope"},"org":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org"},"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier"}},"type":"object","required":["access_token","expires_in","scope"],"title":"TokenResponse","description":"RFC 6749 token endpoint success response."},"ToolDefinition":{"properties":{"name":{"type":"string","title":"Name","description":"Unique tool name"},"description":{"type":"string","title":"Description","description":"Tool description","default":""},"parameters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Parameters","description":"JSON schema for tool parameters"}},"type":"object","required":["name"],"title":"ToolDefinition"},"ToolDiscoveryBatchRequest":{"properties":{"inputs":{"items":{"$ref":"#/components/schemas/ToolDiscoveryRequest"},"type":"array","maxItems":100,"minItems":1,"title":"Inputs"}},"type":"object","required":["inputs"],"title":"ToolDiscoveryBatchRequest"},"ToolDiscoveryRequest":{"properties":{"query":{"type":"string","minLength":1,"title":"Query","description":"User's query to find relevant tools (REQUIRED)"},"tools":{"items":{"$ref":"#/components/schemas/ToolDefinition"},"type":"array","minItems":1,"title":"Tools","description":"All available tools"},"max_tools":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Max Tools","description":"Maximum number of tools to return (default: 5)","default":5},"always_keep":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Always Keep","description":"Tool names to always include in results"},"compression_model_name":{"type":"string","title":"Compression Model Name","description":"Compression model to use (e.g., 'tdc_espresso')"},"source":{"anyOf":[{"$ref":"#/components/schemas/Source"},{"type":"null"}],"description":"Source of request: demo, extension, sdk:, gateway:"}},"type":"object","required":["query","tools","compression_model_name"],"title":"ToolDiscoveryRequest","description":"Request to discover relevant tools.\n\nBackbone: SaT (conversion happens in compressor layer)\n- chunks = tool descriptions\n- query = user's query\n- output = filtered list of relevant tool names"},"ToolDiscoveryResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"anyOf":[{"$ref":"#/components/schemas/ToolDiscoveryResult"},{"type":"null"}]}},"type":"object","title":"ToolDiscoveryResponse"},"ToolDiscoveryResult":{"properties":{"relevant_tools":{"items":{"type":"string"},"type":"array","title":"Relevant Tools","description":"Names of relevant tools"},"tool_count":{"type":"integer","title":"Tool Count","description":"Number of tools returned"},"original_tool_count":{"type":"integer","title":"Original Tool Count","description":"Number of tools in input"},"reasoning":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reasoning","description":"Why these tools were selected"},"duration_ms":{"type":"integer","title":"Duration Ms","description":"Processing time in milliseconds","default":0}},"type":"object","required":["relevant_tools","tool_count","original_tool_count"],"title":"ToolDiscoveryResult"},"ToolOutputBatchRequest":{"properties":{"inputs":{"items":{"$ref":"#/components/schemas/ToolOutputCompressRequest"},"type":"array","maxItems":100,"minItems":1,"title":"Inputs"}},"type":"object","required":["inputs"],"title":"ToolOutputBatchRequest"},"ToolOutputCompressRequest":{"properties":{"tool_output":{"anyOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"}],"title":"Tool Output","description":"Tool output to compress - single string or list of strings"},"query":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Query","description":"User's query for context-aware compression (required for GemFilter, prohibited for Lingua)"},"tool_name":{"type":"string","title":"Tool Name","description":"Name of the tool that produced the output"},"compression_model_name":{"type":"string","title":"Compression Model Name","description":"Compression model to use (e.g., 'toc_latte' or 'toc_americano')"},"target_compression_ratio":{"type":"number","maximum":200.0,"minimum":0.0,"title":"Target Compression Ratio","description":"Target compression ratio: 0-1 (strength) or >1 for factor. Max 200. Default: 0.5","default":0.5},"source":{"anyOf":[{"$ref":"#/components/schemas/Source"},{"type":"null"}],"description":"Source of request: demo, extension, sdk:, gateway:"}},"type":"object","required":["tool_output","tool_name","compression_model_name"],"title":"ToolOutputCompressRequest","description":"Request to compress tool output.\n\nAccepts tool_output as either:\n- str: Single tool output\n- List[str]: Multiple tool outputs (output type matches input type)\n\nBackbone mapping (conversion happens in compressor layer):\n- Lingua models (toc_americano): query PROHIBITED\n- GemFilter models (toc_latte): query REQUIRED"},"ToolOutputCompressResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"anyOf":[{"$ref":"#/components/schemas/ToolOutputCompressResult"},{"type":"null"}]}},"type":"object","title":"ToolOutputCompressResponse"},"ToolOutputCompressResult":{"properties":{"compressed_output":{"anyOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"}],"title":"Compressed Output","description":"Compressed tool output - same type as input"},"original_tokens":{"type":"integer","title":"Original Tokens","description":"Token count of original output"},"compressed_tokens":{"type":"integer","title":"Compressed Tokens","description":"Token count after compression"},"compression_ratio":{"type":"number","title":"Compression Ratio","description":"Actual compression ratio achieved"},"tool_name":{"type":"string","title":"Tool Name","description":"Name of the tool"},"duration_ms":{"type":"integer","title":"Duration Ms","description":"Processing time in milliseconds","default":0}},"type":"object","required":["compressed_output","original_tokens","compressed_tokens","compression_ratio","tool_name"],"title":"ToolOutputCompressResult"},"Transaction":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","enum":["money_upload","free_trial","refund","adjustment"],"title":"Type","description":"money_upload, free_trial, refund, adjustment"},"amount_usd":{"type":"number","title":"Amount Usd","description":"Amount in USD"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"status":{"type":"string","enum":["completed","pending","failed","refunded"],"title":"Status","description":"completed, pending, failed, refunded"},"payment_provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Provider"},"payment_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Id"},"payment_method_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Method Type","description":"card, apple_pay, google_pay, link, etc."},"card_brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Card Brand","description":"visa, mastercard, amex, etc."},"card_last4":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Card Last4","description":"Last 4 digits of card"},"receipt_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Receipt Url","description":"Stripe receipt/invoice URL"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","type","amount_usd","status","created_at"],"title":"Transaction"},"TransactionResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"anyOf":[{"items":{"$ref":"#/components/schemas/Transaction"},"type":"array"},{"$ref":"#/components/schemas/Transaction"},{"type":"null"}],"title":"Data"}},"type":"object","title":"TransactionResponse"},"UsageBreakdown":{"properties":{"name":{"type":"string","title":"Name"},"count":{"type":"integer","title":"Count","default":0},"tokens":{"type":"integer","title":"Tokens","default":0},"cost_usd":{"type":"number","title":"Cost Usd","default":0.0}},"type":"object","required":["name"],"title":"UsageBreakdown"},"UsageStatsResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"anyOf":[{"$ref":"#/components/schemas/UsageStatsResult"},{"type":"null"}]}},"type":"object","title":"UsageStatsResponse"},"UsageStatsResult":{"properties":{"period":{"type":"string","title":"Period","description":"Time period (last_day, last_week, etc.)"},"period_start":{"type":"string","title":"Period Start","description":"Start of period (ISO)"},"period_end":{"type":"string","title":"Period End","description":"End of period (ISO)"},"group_by":{"type":"string","title":"Group By","description":"Grouping: hour or day"},"time_series":{"items":{"$ref":"#/components/schemas/TimeSeriesDataPoint"},"type":"array","title":"Time Series","description":"Time series data points"},"total_requests":{"type":"integer","title":"Total Requests","description":"Total number of requests","default":0},"total_input_tokens":{"type":"integer","title":"Total Input Tokens","description":"Total original input tokens","default":0},"total_compressed_input_tokens":{"type":"integer","title":"Total Compressed Input Tokens","description":"Total compressed input tokens","default":0},"total_output_tokens":{"type":"integer","title":"Total Output Tokens","description":"Total output tokens","default":0},"total_cost_usd":{"type":"number","title":"Total Cost Usd","description":"Total cost in USD","default":0.0},"total_savings_usd":{"type":"number","title":"Total Savings Usd","description":"Total savings in USD","default":0.0},"total_spent_usd":{"type":"number","title":"Total Spent Usd","description":"Total amount spent in USD","default":0.0},"api_key_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key Id","description":"Filtered by API key ID"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model","description":"Filtered by model"},"per_key_time_series":{"anyOf":[{"additionalProperties":{"items":{"$ref":"#/components/schemas/TimeSeriesDataPoint"},"type":"array"},"type":"object"},{"type":"null"}],"title":"Per Key Time Series","description":"Per-API-key time series, keyed by api_token_id. Set when include_per_key=true."}},"type":"object","required":["period","period_start","period_end","group_by"],"title":"UsageStatsResult"},"UserAPIKeyInfo":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"scope":{"$ref":"#/components/schemas/APIKeyScope"},"status":{"$ref":"#/components/schemas/APIKeyStatus"},"key_preview":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Key Preview"},"total_requests":{"type":"integer","title":"Total Requests","default":0},"last_used_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Used At"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"daily_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Daily Limit"},"daily_requests_remaining":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Daily Requests Remaining"},"budget_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Budget Limit"},"budget_used_this_month":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Budget Used This Month"}},"type":"object","required":["id","name","scope","status"],"title":"UserAPIKeyInfo"},"UserAnalyticsResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"user_id":{"type":"string","title":"User Id"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"tier":{"$ref":"#/components/schemas/TierName","default":"tier1"},"role":{"type":"string","enum":["user","admin","support"],"title":"Role","default":"user"},"account_type":{"$ref":"#/components/schemas/AccountType","default":"user"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"last_login":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Login"},"prepaid_added":{"type":"number","title":"Prepaid Added","default":0.0},"prepaid_spent":{"type":"number","title":"Prepaid Spent","default":0.0},"prepaid_balance":{"type":"number","title":"Prepaid Balance","default":0.0},"monthly_budget":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Monthly Budget"},"spend_this_month":{"type":"number","title":"Spend This Month","default":0.0},"postpaid_paid":{"type":"number","title":"Postpaid Paid","default":0.0},"postpaid_unpaid":{"type":"number","title":"Postpaid Unpaid","default":0.0},"postpaid_current_month":{"type":"number","title":"Postpaid Current Month","default":0.0},"total_requests":{"type":"integer","title":"Total Requests","default":0},"api_calls_this_month":{"type":"integer","title":"Api Calls This Month","default":0},"total_input_tokens":{"type":"integer","title":"Total Input Tokens","default":0},"total_output_tokens":{"type":"integer","title":"Total Output Tokens","default":0},"total_tokens_saved":{"type":"integer","title":"Total Tokens Saved","default":0},"avg_compression_ratio":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Compression Ratio"},"avg_latency_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Latency Ms"},"median_latency_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Median Latency Ms"},"api_keys":{"items":{"$ref":"#/components/schemas/UserAPIKeyInfo"},"type":"array","title":"Api Keys","default":[]},"active_api_keys":{"type":"integer","title":"Active Api Keys","default":0},"usage_by_model":{"items":{"$ref":"#/components/schemas/UsageBreakdown"},"type":"array","title":"Usage By Model","default":[]},"usage_by_type":{"items":{"$ref":"#/components/schemas/UsageBreakdown"},"type":"array","title":"Usage By Type","default":[]},"usage_by_source":{"items":{"$ref":"#/components/schemas/UsageBreakdown"},"type":"array","title":"Usage By Source","default":[]},"last_request_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Request At"},"outcomes_30d":{"additionalProperties":{"type":"integer"},"type":"object","title":"Outcomes 30D","default":{}},"requests_succeeded_30d":{"type":"integer","title":"Requests Succeeded 30D","default":0},"requests_skipped_30d":{"type":"integer","title":"Requests Skipped 30D","default":0},"requests_rejected_30d":{"type":"integer","title":"Requests Rejected 30D","default":0},"requests_errored_30d":{"type":"integer","title":"Requests Errored 30D","default":0}},"type":"object","required":["user_id"],"title":"UserAnalyticsResponse"},"UserBasic":{"properties":{"user_id":{"type":"string","title":"User Id"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"role":{"type":"string","enum":["user","admin","support"],"title":"Role","default":"user"},"tier":{"$ref":"#/components/schemas/TierName","default":"tier1"},"account_type":{"$ref":"#/components/schemas/AccountType","default":"user"},"prepaid_added":{"type":"number","title":"Prepaid Added","default":0.0},"prepaid_balance":{"type":"number","title":"Prepaid Balance","default":0.0},"prepaid_spent":{"type":"number","title":"Prepaid Spent","default":0.0},"postpaid_paid":{"type":"number","title":"Postpaid Paid","default":0.0},"postpaid_unpaid":{"type":"number","title":"Postpaid Unpaid","default":0.0},"postpaid_current_month":{"type":"number","title":"Postpaid Current Month","default":0.0},"total_requests":{"type":"integer","title":"Total Requests","default":0},"total_tokens":{"type":"integer","title":"Total Tokens","default":0},"requests_rejected_30d":{"type":"integer","title":"Requests Rejected 30D","default":0},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"last_login":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Login"},"last_request_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Request At"}},"type":"object","required":["user_id"],"title":"UserBasic"},"UserDetailsResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"user_id":{"type":"string","title":"User Id"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"tier":{"$ref":"#/components/schemas/TierName","default":"tier1"},"prepaid_spent":{"type":"number","title":"Prepaid Spent","default":0.0},"prepaid_added":{"type":"number","title":"Prepaid Added","default":0.0},"prepaid_balance":{"type":"number","title":"Prepaid Balance","default":0.0},"role":{"type":"string","enum":["user","admin","support"],"title":"Role","default":"user"},"account_type":{"$ref":"#/components/schemas/AccountType","default":"user"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"last_login":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Login"}},"type":"object","required":["user_id"],"title":"UserDetailsResponse"},"UserListResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"users":{"items":{"$ref":"#/components/schemas/UserBasic"},"type":"array","title":"Users","default":[]},"total":{"type":"integer","title":"Total","default":0},"page":{"type":"integer","title":"Page","default":1},"limit":{"type":"integer","title":"Limit","default":50},"tier_distribution":{"additionalProperties":{"type":"integer"},"type":"object","title":"Tier Distribution","default":{}},"admin_count":{"type":"integer","title":"Admin Count","default":0}},"type":"object","title":"UserListResponse"},"UserUpdateRequest":{"properties":{"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name","description":"Full name"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name","description":"Company name"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country","description":"Country"},"tier":{"anyOf":[{"$ref":"#/components/schemas/TierName"},{"type":"null"}],"description":"New rate-limit tier"},"account_type":{"anyOf":[{"$ref":"#/components/schemas/AccountType"},{"type":"null"}],"description":"Billing plan: 'user' (prepaid) or 'enterprise' (postpaid). Admin-only."},"current_remaining_credits":{"anyOf":[{"type":"number","maximum":100000.0,"minimum":0.0},{"type":"null"}],"title":"Current Remaining Credits","description":"Set user balance/credits (must be finite, non-negative, max $100k)"}},"type":"object","title":"UserUpdateRequest"},"ValidateKeyResponse":{"properties":{"valid":{"type":"boolean","title":"Valid"},"user_id":{"type":"string","title":"User Id"},"scope":{"type":"string","title":"Scope"}},"type":"object","required":["valid","user_id","scope"],"title":"ValidateKeyResponse"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WebhookResponse":{"properties":{"received":{"type":"boolean","title":"Received","default":true},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","title":"WebhookResponse"},"WhitelistCreateRequest":{"properties":{"pattern":{"type":"string","maxLength":254,"minLength":3,"title":"Pattern"},"credit_limit_usd":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Credit Limit Usd"},"notes":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Notes"}},"type":"object","required":["pattern"],"title":"WhitelistCreateRequest"},"WhitelistEntry":{"properties":{"id":{"type":"string","title":"Id"},"pattern":{"type":"string","title":"Pattern","description":"\"user@company.com\" or \"@company.com\""},"credit_limit_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Credit Limit Usd"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"created_at":{"type":"string","title":"Created At"},"detected_user_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Detected User Count"}},"type":"object","required":["id","pattern","created_at"],"title":"WhitelistEntry"},"WhitelistListResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"entries":{"items":{"$ref":"#/components/schemas/WhitelistEntry"},"type":"array","title":"Entries"},"total":{"type":"integer","title":"Total","default":0}},"type":"object","title":"WhitelistListResponse"},"WhitelistMatchPreviewRequest":{"properties":{"email":{"type":"string","maxLength":254,"minLength":3,"title":"Email"}},"type":"object","required":["email"],"title":"WhitelistMatchPreviewRequest"},"WhitelistMatchPreviewResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"match":{"anyOf":[{"$ref":"#/components/schemas/WhitelistEntry"},{"type":"null"}]}},"type":"object","title":"WhitelistMatchPreviewResponse"},"WhitelistMatchedUser":{"properties":{"user_id":{"type":"string","title":"User Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"}},"type":"object","required":["user_id","email"],"title":"WhitelistMatchedUser"},"WhitelistMatchesResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"rule_id":{"type":"string","title":"Rule Id"},"pattern":{"type":"string","title":"Pattern"},"matches":{"items":{"$ref":"#/components/schemas/WhitelistMatchedUser"},"type":"array","title":"Matches"},"total":{"type":"integer","title":"Total","default":0}},"type":"object","required":["rule_id","pattern"],"title":"WhitelistMatchesResponse"},"WorkplaceType":{"type":"string","enum":["onsite","remote","hybrid"],"title":"WorkplaceType"},"WsCallbackRequest":{"properties":{"ws_session":{"type":"string","title":"Ws Session"},"state":{"type":"string","title":"State"}},"type":"object","required":["ws_session","state"],"title":"WsCallbackRequest"},"WsCallbackResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"}},"type":"object","required":["success","message"],"title":"WsCallbackResponse"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}