{"openapi":"3.1.0","info":{"title":"Model Selection Service","description":"Service for managing available AI models and their configurations based on user pricing plans","version":"1.0.0"},"servers":[{"url":"/api/ds-prototypes/model_selection"}],"paths":{"/v1/workspaces/{workspaceId}/llm-blocklist-entries":{"post":{"tags":["LLMBlocklistEntry"],"summary":"Create Blocklist Entry V1","description":"Add an LLM provider to the blocklist for a workspace.","operationId":"create_blocklist_entry_v1_v1_workspaces__workspaceId__llm_blocklist_entries_post","parameters":[{"name":"workspaceId","in":"path","required":true,"schema":{"type":"string","title":"Workspaceid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlocklistEntryCreateRequestV2"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlocklistEntryResponse"}}}},"403":{"description":"Forbidden – caller lacks access or modelBlocklistEnabled is inactive"},"409":{"description":"Provider is already in the blocklist for this workspace"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["LLMBlocklistEntry"],"summary":"List Blocklist Entries V1","description":"List blocked LLM providers for a workspace. Optionally filter by llmProviderKey.","operationId":"list_blocklist_entries_v1_v1_workspaces__workspaceId__llm_blocklist_entries_get","parameters":[{"name":"workspaceId","in":"path","required":true,"schema":{"type":"string","title":"Workspaceid"}},{"name":"llmProviderKey","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Llmproviderkey"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedResponse_BlocklistEntryResponse_"}}}},"403":{"description":"Forbidden – caller lacks access or modelBlocklistEnabled is inactive"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/workspaces/{workspaceId}/llm-blocklist-entries/{blocklistEntryId}":{"delete":{"tags":["LLMBlocklistEntry"],"summary":"Delete Blocklist Entry V1","description":"Remove a blocklist entry by its ID.","operationId":"delete_blocklist_entry_v1_v1_workspaces__workspaceId__llm_blocklist_entries__blocklistEntryId__delete","parameters":[{"name":"workspaceId","in":"path","required":true,"schema":{"type":"string","title":"Workspaceid"}},{"name":"blocklistEntryId","in":"path","required":true,"schema":{"type":"string","title":"Blocklistentryid"}}],"responses":{"204":{"description":"Successful Response"},"403":{"description":"Forbidden – caller lacks access or modelBlocklistEnabled is inactive"},"404":{"description":"Blocklist entry not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/models":{"get":{"tags":["Model"],"summary":"Get Available Models","operationId":"get_available_models_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ModelsOut"},"type":"array","title":"Response Get Available Models Models Get"}}}}}}},"/health":{"get":{"summary":"Health Check","description":"Health check endpoint","operationId":"health_check_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"BlocklistEntryCreateRequestV2":{"properties":{"llmProviderKey":{"type":"string","title":"Llmproviderkey"}},"type":"object","required":["llmProviderKey"],"title":"BlocklistEntryCreateRequestV2"},"BlocklistEntryResponse":{"properties":{"id":{"type":"string","title":"Id"},"createdAt":{"type":"string","format":"date-time","title":"Createdat"},"updatedAt":{"type":"string","format":"date-time","title":"Updatedat"},"createdByUserId":{"type":"string","title":"Createdbyuserid"},"workspaceId":{"type":"string","title":"Workspaceid"},"llmProviderKey":{"type":"string","title":"Llmproviderkey"}},"type":"object","required":["id","createdAt","updatedAt","createdByUserId","workspaceId","llmProviderKey"],"title":"BlocklistEntryResponse"},"ChatParameters":{"properties":{"temperature":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Temperature"},"reasoning_effort":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reasoning Effort"}},"type":"object","title":"ChatParameters"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"Hostings":{"type":"string","enum":["azure","openrouter"],"title":"Hostings"},"ModelsOut":{"properties":{"id":{"type":"string","title":"Id","description":"Machine readable name of the model","example":"gpt-4.1"},"name":{"type":"string","title":"Name","description":"Human readable name of the model"},"short_name":{"type":"string","title":"Short Name","description":"Readable name of the model without the company/provider"},"provider":{"$ref":"#/components/schemas/Providers","description":"Name of the LLM provider","example":"google"},"description":{"type":"string","title":"Description","description":"Full description of the model"},"allowed_params":{"items":{"$ref":"#/components/schemas/Parameters"},"type":"array","title":"Allowed Params","description":"Allowed name of parameters","example":["temperature","max_tokens"]},"region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region","description":"Hosting location"},"hosting":{"$ref":"#/components/schemas/Hostings","description":"Either by OpenRouter or Azure","example":"azure"},"context_window":{"type":"integer","title":"Context Window","description":"Size of the context window","example":128000},"available":{"type":"boolean","title":"Available","description":"Can the model by access via OpenRouter?"},"allowed":{"type":"boolean","title":"Allowed","description":"Does the pricing plan allow to use the model?"},"chat_params":{"$ref":"#/components/schemas/ChatParameters","description":"Default chat parameters of a model","example":{"reasoning_effort":"minimal","temperature":0.7}},"reasoning_model":{"type":"boolean","title":"Reasoning Model","description":"Whether this is a reasoning model"},"tool_support":{"type":"boolean","title":"Tool Support","description":"Model supports to call tools"},"priority":{"type":"integer","title":"Priority","description":"Induced sorting order for UI","example":1},"show_new_hint":{"type":"boolean","title":"Show New Hint","description":"Whether to show 'new' hint for this model"},"app_release_date":{"type":"integer","title":"App Release Date","description":"Unix timestamp when model was released in app"},"model_release_date":{"type":"integer","title":"Model Release Date","description":"Unix timestamp from OpenRouter created field"}},"type":"object","required":["show_new_hint","app_release_date","model_release_date"],"title":"ModelsOut"},"PageInfo":{"properties":{"size":{"type":"integer","title":"Size"},"totalElements":{"type":"integer","title":"Totalelements"},"totalPages":{"type":"integer","title":"Totalpages"},"currentPage":{"type":"integer","title":"Currentpage"}},"type":"object","required":["size","totalElements","totalPages","currentPage"],"title":"PageInfo"},"PagedResponse_BlocklistEntryResponse_":{"properties":{"page":{"$ref":"#/components/schemas/PageInfo"},"data":{"items":{"$ref":"#/components/schemas/BlocklistEntryResponse"},"type":"array","title":"Data"}},"type":"object","required":["page","data"],"title":"PagedResponse[BlocklistEntryResponse]"},"Parameters":{"type":"string","enum":["include_reasoning","max_tokens","reasoning","reasoning_effort","response_format","seed","web_search_options","frequency_penalty","presence_penalty","repetition_penalty","stop","structured_outputs","temperature","tool_choice","tools","top_p","top_k"],"title":"Parameters"},"Providers":{"type":"string","enum":["anthropic","google","mistralai","openai"],"title":"Providers"},"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"}}}}