{"openapi":"3.1.0","info":{"title":"LLMoney API","version":"0.1.0"},"paths":{"/api/v1/auth/refresh":{"post":{"tags":["auth"],"summary":"Refresh Token","operationId":"refresh_token_api_v1_auth_refresh_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}}}}},"/api/v1/auth/logout":{"post":{"tags":["auth"],"summary":"Logout","operationId":"logout_api_v1_auth_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/auth/me":{"get":{"tags":["auth"],"summary":"Get Me","operationId":"get_me_api_v1_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/auth/{provider}":{"get":{"tags":["auth"],"summary":"Get Auth Url","operationId":"get_auth_url_api_v1_auth__provider__get","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/{provider}/callback":{"post":{"tags":["auth"],"summary":"Oauth Callback","operationId":"oauth_callback_api_v1_auth__provider__callback_post","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthCallbackRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/calculate":{"post":{"tags":["calculate"],"summary":"Calculate Tokens","description":"Calculate token counts and costs for the given text across multiple models.\n\nWhen the user is authenticated and has API keys, real tokenization is used\nfor API models (GigaChat, Yandex). Otherwise, cl100k_base is used as approximation.","operationId":"calculate_tokens_api_v1_calculate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/exchange-rate":{"get":{"tags":["exchange-rate"],"summary":"Read Exchange Rate","description":"Current USD->RUB exchange rate from the Central Bank of Russia (server-side,\ncached). Replaces the previous browser-side CBR fetch that depended on a\nthird-party CORS proxy.","operationId":"read_exchange_rate_api_v1_exchange_rate_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExchangeRateResponse"}}}}}}},"/api/v1/models":{"get":{"tags":["models"],"summary":"List Models","description":"Get list of all supported LLM models with pricing from DB (fallback to static).","operationId":"list_models_api_v1_models_get","parameters":[{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by provider","title":"Provider"},"description":"Filter by provider"},{"name":"free_only","in":"query","required":false,"schema":{"type":"boolean","description":"Only show models with free tokenization","default":false,"title":"Free Only"},"description":"Only show models with free tokenization"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LLMModelList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/models/{model_id}":{"get":{"tags":["models"],"summary":"Get Model","description":"Get details for a specific model with current price from DB.","operationId":"get_model_api_v1_models__model_id__get","parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LLMModel"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/models/{model_id}/price-history":{"get":{"tags":["models"],"summary":"Get Price History","description":"Get price change history for a model.","operationId":"get_price_history_api_v1_models__model_id__price_history_get","parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PriceHistoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tokenize":{"post":{"tags":["tokenize"],"summary":"Tokenize Text","description":"Tokenize text and return individual tokens with their IDs and text.\nOnly supports tiktoken encodings.","operationId":"tokenize_text_api_v1_tokenize_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenizeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenizeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/api-keys":{"get":{"tags":["api-keys"],"summary":"List Api Keys","description":"List all API keys for the authenticated user.","operationId":"list_api_keys_api_v1_api_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyListResponse"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["api-keys"],"summary":"Create Api Key","description":"Add or replace an API key for a provider.","operationId":"create_api_key_api_v1_api_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/api-keys/{provider}":{"delete":{"tags":["api-keys"],"summary":"Delete Api Key","description":"Delete an API key for a provider.","operationId":"delete_api_key_api_v1_api_keys__provider__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/api-keys/{provider}/validate":{"post":{"tags":["api-keys"],"summary":"Validate Api Key","description":"Test if an API key works by making a lightweight API call.","operationId":"validate_api_key_api_v1_api_keys__provider__validate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyValidateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/call":{"post":{"tags":["call"],"summary":"Call Model","description":"Call an AI model with the given text and return the response with real token counts.","operationId":"call_model_api_v1_call_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelCallRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelCallResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/recommend":{"get":{"tags":["recommend"],"summary":"Recommend Models","description":"Get ranked model recommendations based on budget and constraints.\n\nDesigned for AI agents to programmatically select optimal models.\nReturns a simplified model list sorted by the requested criterion.","operationId":"recommend_models_api_v1_recommend_get","parameters":[{"name":"max_input_price","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum price per 1M input tokens","title":"Max Input Price"},"description":"Maximum price per 1M input tokens"},{"name":"max_output_price","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum price per 1M output tokens","title":"Max Output Price"},"description":"Maximum price per 1M output tokens"},{"name":"min_context_window","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum context window size (tokens)","title":"Min Context Window"},"description":"Minimum context window size (tokens)"},{"name":"currency","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by currency: usd or rub","title":"Currency"},"description":"Filter by currency: usd or rub"},{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by provider slug","title":"Provider"},"description":"Filter by provider slug"},{"name":"sort_by","in":"query","required":false,"schema":{"$ref":"#/components/schemas/SortBy","description":"Sort criterion","default":"input_price"},"description":"Sort criterion"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Max results","default":10,"title":"Limit"},"description":"Max results"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecommendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/prices":{"post":{"tags":["admin"],"summary":"Update Price","description":"Add a new price entry for a model (creates a history record).","operationId":"update_price_api_v1_admin_prices_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PriceUpdateRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Update Price Api V1 Admin Prices Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/prices/sync-all":{"post":{"tags":["admin"],"summary":"Sync All Prices","description":"Run price sync from all configured sources (OpenRouter, LiteLLM, Yandex, GigaChat).","operationId":"sync_all_prices_api_v1_admin_prices_sync_all_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Sync All Prices Api V1 Admin Prices Sync All Post"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/prices/sync-yandex":{"post":{"tags":["admin"],"summary":"Sync Yandex Prices","description":"Attempt to sync prices from Yandex Cloud Billing API.","operationId":"sync_yandex_prices_api_v1_admin_prices_sync_yandex_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Sync Yandex Prices Api V1 Admin Prices Sync Yandex Post"}}}}},"security":[{"HTTPBearer":[]}]}},"/llms.txt":{"get":{"summary":"Llms Txt","description":"Machine-readable service description for AI agents (llms.txt convention).","operationId":"llms_txt_llms_txt_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/health":{"get":{"summary":"Health Check","operationId":"health_check_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/version":{"get":{"summary":"Version","description":"Git commit the running process was deployed from. Used by CI to confirm\na restart actually picked up the new code (/health alone cannot).","operationId":"version_version_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"ApiKeyCreate":{"properties":{"provider":{"type":"string","title":"Provider"},"key":{"type":"string","title":"Key"},"extra":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Extra"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"}},"type":"object","required":["provider","key"],"title":"ApiKeyCreate"},"ApiKeyListResponse":{"properties":{"keys":{"items":{"$ref":"#/components/schemas/ApiKeyResponse"},"type":"array","title":"Keys"}},"type":"object","required":["keys"],"title":"ApiKeyListResponse"},"ApiKeyResponse":{"properties":{"id":{"type":"string","title":"Id"},"provider":{"type":"string","title":"Provider"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"key_hint":{"type":"string","title":"Key Hint"},"is_valid":{"type":"boolean","title":"Is Valid"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","provider","display_name","key_hint","is_valid","created_at"],"title":"ApiKeyResponse"},"ApiKeyValidateResponse":{"properties":{"is_valid":{"type":"boolean","title":"Is Valid"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["is_valid"],"title":"ApiKeyValidateResponse"},"AuthResponse":{"properties":{"access_token":{"type":"string","title":"Access Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"},"user":{"$ref":"#/components/schemas/UserResponse"}},"type":"object","required":["access_token","user"],"title":"AuthResponse"},"CalculateRequest":{"properties":{"text":{"type":"string","title":"Text"},"model_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Model Ids"},"output_multiplier":{"type":"number","title":"Output Multiplier","default":1.0},"cached_input_ratio":{"type":"number","title":"Cached Input Ratio","default":0.0},"tools":{"anyOf":[{"items":{"$ref":"#/components/schemas/ToolEstimate"},"type":"array"},{"type":"null"}],"title":"Tools"}},"type":"object","required":["text"],"title":"CalculateRequest"},"CalculateResponse":{"properties":{"input_length":{"type":"integer","title":"Input Length"},"word_count":{"type":"integer","title":"Word Count"},"results":{"items":{"$ref":"#/components/schemas/ModelCalculationResult"},"type":"array","title":"Results"}},"type":"object","required":["input_length","word_count","results"],"title":"CalculateResponse"},"Currency":{"type":"string","enum":["usd","rub"],"title":"Currency"},"ExchangeRateResponse":{"properties":{"rate":{"type":"number","title":"Rate"},"source":{"type":"string","title":"Source"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["rate","source"],"title":"ExchangeRateResponse"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"LLMModel":{"properties":{"id":{"type":"string","title":"Id"},"provider":{"type":"string","title":"Provider"},"provider_display_name":{"type":"string","title":"Provider Display Name"},"name":{"type":"string","title":"Name"},"display_name":{"type":"string","title":"Display Name"},"tokenizer_type":{"$ref":"#/components/schemas/TokenizerType"},"tokenizer_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Tokenizer Config"},"input_price":{"type":"number","title":"Input Price"},"output_price":{"type":"number","title":"Output Price"},"cached_input_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cached Input Price"},"currency":{"$ref":"#/components/schemas/Currency"},"is_paid_api":{"type":"boolean","title":"Is Paid Api","default":false},"supports_byok":{"type":"boolean","title":"Supports Byok","default":true},"context_window":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Context Window"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"knowledge_cutoff":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Knowledge Cutoff"},"price_updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Price Updated At"}},"type":"object","required":["id","provider","provider_display_name","name","display_name","tokenizer_type","input_price","output_price","currency"],"title":"LLMModel"},"LLMModelList":{"properties":{"models":{"items":{"$ref":"#/components/schemas/LLMModel"},"type":"array","title":"Models"}},"type":"object","required":["models"],"title":"LLMModelList"},"ModelCalculationResult":{"properties":{"model_id":{"type":"string","title":"Model Id"},"provider":{"type":"string","title":"Provider"},"provider_display_name":{"type":"string","title":"Provider Display Name"},"model_name":{"type":"string","title":"Model Name"},"display_name":{"type":"string","title":"Display Name"},"tokens":{"type":"integer","title":"Tokens"},"cached_tokens":{"type":"integer","title":"Cached Tokens","default":0},"input_cost":{"type":"number","title":"Input Cost"},"cached_input_cost":{"type":"number","title":"Cached Input Cost","default":0.0},"effective_input_cost":{"type":"number","title":"Effective Input Cost","default":0.0},"output_cost":{"type":"number","title":"Output Cost"},"total_cost":{"type":"number","title":"Total Cost"},"currency":{"$ref":"#/components/schemas/Currency"},"context_window":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Context Window"},"is_available":{"type":"boolean","title":"Is Available","default":true},"tokenizer_used":{"type":"string","title":"Tokenizer Used","default":""},"tool_input_tokens":{"type":"integer","title":"Tool Input Tokens","default":0},"tool_output_tokens":{"type":"integer","title":"Tool Output Tokens","default":0},"tool_cost":{"type":"number","title":"Tool Cost","default":0.0}},"type":"object","required":["model_id","provider","provider_display_name","model_name","display_name","tokens","input_cost","output_cost","total_cost","currency"],"title":"ModelCalculationResult"},"ModelCallRequest":{"properties":{"model_id":{"type":"string","title":"Model Id"},"text":{"type":"string","title":"Text"}},"type":"object","required":["model_id","text"],"title":"ModelCallRequest"},"ModelCallResponse":{"properties":{"model_id":{"type":"string","title":"Model Id"},"response_text":{"type":"string","title":"Response Text"},"input_tokens":{"type":"integer","title":"Input Tokens"},"output_tokens":{"type":"integer","title":"Output Tokens"},"input_cost":{"type":"number","title":"Input Cost"},"output_cost":{"type":"number","title":"Output Cost"},"total_cost":{"type":"number","title":"Total Cost"},"currency":{"type":"string","title":"Currency"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["model_id","response_text","input_tokens","output_tokens","input_cost","output_cost","total_cost","currency"],"title":"ModelCallResponse"},"OAuthCallbackRequest":{"properties":{"code":{"type":"string","title":"Code"}},"type":"object","required":["code"],"title":"OAuthCallbackRequest"},"PriceHistoryEntry":{"properties":{"date":{"type":"string","title":"Date"},"input_price":{"type":"number","title":"Input Price"},"output_price":{"type":"number","title":"Output Price"},"cached_input_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cached Input Price"},"source":{"type":"string","title":"Source"}},"type":"object","required":["date","input_price","output_price","cached_input_price","source"],"title":"PriceHistoryEntry"},"PriceHistoryResponse":{"properties":{"model_id":{"type":"string","title":"Model Id"},"entries":{"items":{"$ref":"#/components/schemas/PriceHistoryEntry"},"type":"array","title":"Entries"}},"type":"object","required":["model_id","entries"],"title":"PriceHistoryResponse"},"PriceUpdateRequest":{"properties":{"model_id":{"type":"string","title":"Model Id"},"input_price":{"type":"number","title":"Input Price"},"output_price":{"type":"number","title":"Output Price"},"cached_input_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cached Input Price"},"source":{"type":"string","title":"Source","default":"manual"}},"type":"object","required":["model_id","input_price","output_price"],"title":"PriceUpdateRequest"},"RecommendResponse":{"properties":{"models":{"items":{"$ref":"#/components/schemas/RecommendedModel"},"type":"array","title":"Models"},"total_available":{"type":"integer","title":"Total Available"},"filters_applied":{"additionalProperties":true,"type":"object","title":"Filters Applied"}},"type":"object","required":["models","total_available","filters_applied"],"title":"RecommendResponse"},"RecommendedModel":{"properties":{"id":{"type":"string","title":"Id"},"provider":{"type":"string","title":"Provider"},"name":{"type":"string","title":"Name"},"display_name":{"type":"string","title":"Display Name"},"input_price":{"type":"number","title":"Input Price"},"output_price":{"type":"number","title":"Output Price"},"cached_input_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cached Input Price"},"currency":{"type":"string","title":"Currency"},"context_window":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Context Window"}},"type":"object","required":["id","provider","name","display_name","input_price","output_price","currency"],"title":"RecommendedModel"},"SortBy":{"type":"string","enum":["input_price","output_price","context_window"],"title":"SortBy"},"TokenInfo":{"properties":{"id":{"type":"integer","title":"Id"},"text":{"type":"string","title":"Text"}},"type":"object","required":["id","text"],"title":"TokenInfo"},"TokenResponse":{"properties":{"access_token":{"type":"string","title":"Access Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"}},"type":"object","required":["access_token"],"title":"TokenResponse"},"TokenizeRequest":{"properties":{"text":{"type":"string","title":"Text"},"encoding":{"type":"string","title":"Encoding","default":"cl100k_base"}},"type":"object","required":["text"],"title":"TokenizeRequest"},"TokenizeResponse":{"properties":{"tokens":{"items":{"$ref":"#/components/schemas/TokenInfo"},"type":"array","title":"Tokens"},"total_count":{"type":"integer","title":"Total Count"},"encoding":{"type":"string","title":"Encoding"}},"type":"object","required":["tokens","total_count","encoding"],"title":"TokenizeResponse"},"TokenizerType":{"type":"string","enum":["tiktoken","api_gigachat","api_yandex","approximation"],"title":"TokenizerType"},"ToolEstimate":{"properties":{"type":{"type":"string","enum":["code_interpreter","web_search","file_search","mcp","function"],"title":"Type"},"count":{"type":"integer","maximum":1000.0,"minimum":0.0,"title":"Count","default":1},"calls":{"type":"integer","maximum":1000.0,"minimum":0.0,"title":"Calls","default":1},"def_tokens":{"anyOf":[{"type":"integer","maximum":1000000.0,"minimum":0.0},{"type":"null"}],"title":"Def Tokens"},"call_tokens":{"anyOf":[{"type":"integer","maximum":1000000.0,"minimum":0.0},{"type":"null"}],"title":"Call Tokens"},"result_tokens":{"anyOf":[{"type":"integer","maximum":1000000.0,"minimum":0.0},{"type":"null"}],"title":"Result Tokens"}},"type":"object","required":["type"],"title":"ToolEstimate","description":"One tool the user expects to use, for token-overhead estimation.\n\nToken contribution = definitions (input, once per request) + results\n(input, per invocation) + calls (output, per invocation). Defaults live in\n``app.services.tool_overhead``; any of the *_tokens fields override them."},"UserResponse":{"properties":{"id":{"type":"string","title":"Id"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","email","name","avatar_url"],"title":"UserResponse"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}