From 32bfbbfbe1c0e55aeb7254cc50f8e8b2eadf49be Mon Sep 17 00:00:00 2001 From: Sameer Kankute Date: Thu, 19 Feb 2026 11:58:25 +0530 Subject: [PATCH 1/8] Add method support for passthrough endpoints --- litellm/proxy/_types.py | 4 + .../pass_through_endpoints.py | 83 ++++++++++++++----- 2 files changed, 66 insertions(+), 21 deletions(-) diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index 612cb0e1e76..e94e41992d7 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -1929,6 +1929,10 @@ class PassThroughGenericEndpoint(LiteLLMPydanticObjectBase): default=False, description="True if this endpoint is defined in the config file, False if from DB. Config-defined endpoints cannot be edited via the UI.", ) + methods: Optional[List[str]] = Field( + default=None, + description="List of HTTP methods this endpoint handles (e.g., ['GET', 'POST']). If None or empty, all methods (GET, POST, PUT, DELETE, PATCH) are supported for backward compatibility. This allows the same path to have different targets for different HTTP methods.", + ) class PassThroughEndpointResponse(LiteLLMPydanticObjectBase): diff --git a/litellm/proxy/pass_through_endpoints/pass_through_endpoints.py b/litellm/proxy/pass_through_endpoints/pass_through_endpoints.py index 56b513554a8..20a446bd29b 100644 --- a/litellm/proxy/pass_through_endpoints/pass_through_endpoints.py +++ b/litellm/proxy/pass_through_endpoints/pass_through_endpoints.py @@ -1142,7 +1142,8 @@ def create_pass_through_route( passthrough_params = ( InitPassThroughEndpointHelpers.get_registered_pass_through_route( - route=path + route=path, + method=request.method ) ) target_params = { @@ -1847,20 +1848,29 @@ class InitPassThroughEndpointHelpers: cost_per_request: Optional[float], endpoint_id: str, guardrails: Optional[dict] = None, + methods: Optional[List[str]] = None, ): """Add exact path route for pass-through endpoint""" - route_key = f"{endpoint_id}:exact:{path}" + # Default to all methods if none specified (backward compatibility) + if methods is None or len(methods) == 0: + methods = ["GET", "POST", "PUT", "DELETE", "PATCH"] + + # Create route key that includes methods for uniqueness + methods_str = ",".join(sorted(methods)) + route_key = f"{endpoint_id}:exact:{path}:{methods_str}" # Check if this exact route is already registered if route_key in _registered_pass_through_routes: verbose_proxy_logger.debug( "Updating duplicate exact pass through endpoint: %s (already registered)", path, + methods, ) verbose_proxy_logger.debug( - "adding exact pass through endpoint: %s, dependencies: %s", + "adding exact pass through endpoint: %s, methods: %s, dependencies: %s", path, + methods, dependencies, ) @@ -1878,7 +1888,7 @@ class InitPassThroughEndpointHelpers: cost_per_request=cost_per_request, guardrails=guardrails, ), - methods=["GET", "POST", "PUT", "DELETE", "PATCH"], + methods=methods, dependencies=dependencies, ) @@ -1887,6 +1897,7 @@ class InitPassThroughEndpointHelpers: "endpoint_id": endpoint_id, "path": path, "type": "exact", + "methods": methods, "passthrough_params": { "target": target, "custom_headers": custom_headers, @@ -1910,21 +1921,29 @@ class InitPassThroughEndpointHelpers: cost_per_request: Optional[float], endpoint_id: str, guardrails: Optional[dict] = None, + methods: Optional[List[str]] = None, ): """Add wildcard route for sub-paths""" + # Default to all methods if none specified (backward compatibility) + if methods is None or len(methods) == 0: + methods = ["GET", "POST", "PUT", "DELETE", "PATCH"] + wildcard_path = f"{path}/{{subpath:path}}" - route_key = f"{endpoint_id}:subpath:{path}" + methods_str = ",".join(sorted(methods)) + route_key = f"{endpoint_id}:subpath:{path}:{methods_str}" # Check if this subpath route is already registered if route_key in _registered_pass_through_routes: verbose_proxy_logger.debug( - "Updating duplicate wildcard pass through endpoint: %s (already registered)", + "Updating duplicate wildcard pass through endpoint: %s with methods %s (already registered)", wildcard_path, + methods, ) verbose_proxy_logger.debug( - "adding wildcard pass through endpoint: %s, dependencies: %s", + "adding wildcard pass through endpoint: %s, methods: %s, dependencies: %s", wildcard_path, + methods, dependencies, ) @@ -1943,7 +1962,7 @@ class InitPassThroughEndpointHelpers: cost_per_request=cost_per_request, guardrails=guardrails, ), - methods=["GET", "POST", "PUT", "DELETE", "PATCH"], + methods=methods, dependencies=dependencies, ) @@ -1952,6 +1971,7 @@ class InitPassThroughEndpointHelpers: "endpoint_id": endpoint_id, "path": path, "type": "subpath", + "methods": methods, "passthrough_params": { "target": target, "custom_headers": custom_headers, @@ -2023,11 +2043,12 @@ class InitPassThroughEndpointHelpers: return True # Fast path: check if any registered route key contains this path - # Keys are in format: "{endpoint_id}:exact:{path}" or "{endpoint_id}:subpath:{path}" + # Keys are in format: "{endpoint_id}:exact:{path}:{methods}" or "{endpoint_id}:subpath:{path}:{methods}" + # For backward compatibility, also support old format: "{endpoint_id}:exact:{path}" or "{endpoint_id}:subpath:{path}" # Extract unique paths from keys for quick checking for key in _registered_pass_through_routes.keys(): - parts = key.split(":", 2) # Split into [endpoint_id, type, path] - if len(parts) == 3: + parts = key.split(":", 3) # Split into [endpoint_id, type, path, methods?] + if len(parts) >= 3: route_type = parts[1] registered_path = InitPassThroughEndpointHelpers._build_full_path_with_root( parts[2] @@ -2043,22 +2064,30 @@ class InitPassThroughEndpointHelpers: return False @staticmethod - def get_registered_pass_through_route(route: str) -> Optional[Dict[str, Any]]: - """Get passthrough params for a given route""" + def get_registered_pass_through_route(route: str, method: Optional[str] = None) -> Optional[Dict[str, Any]]: + """Get passthrough params for a given route and optionally filter by HTTP method""" for key in _registered_pass_through_routes.keys(): - parts = key.split(":", 2) # Split into [endpoint_id, type, path] - if len(parts) == 3: + parts = key.split(":", 3) # Split into [endpoint_id, type, path, methods?] + if len(parts) >= 3: route_type = parts[1] registered_path = InitPassThroughEndpointHelpers._build_full_path_with_root( parts[2] ) + + # Get the methods for this route + route_methods = _registered_pass_through_routes[key].get("methods", []) + # Check if path matches + path_matches = False if route_type == "exact" and route == registered_path: - return _registered_pass_through_routes[key] + path_matches = True elif route_type == "subpath": - if route == registered_path or route.startswith( - registered_path + "/" - ): + if route == registered_path or route.startswith(registered_path + "/"): + path_matches = True + + # If path matches and method filter is provided, check if method is allowed + if path_matches: + if method is None or not route_methods or method in route_methods: return _registered_pass_through_routes[key] return None @@ -2158,6 +2187,9 @@ async def initialize_pass_through_endpoints( # Get guardrails config if present _guardrails = endpoint.get("guardrails", None) + + # Get methods list if present (None means all methods for backward compatibility) + _methods = endpoint.get("methods", None) # Add exact path route verbose_proxy_logger.debug( @@ -2174,9 +2206,13 @@ async def initialize_pass_through_endpoints( cost_per_request=endpoint.get("cost_per_request", None), endpoint_id=endpoint_id, guardrails=_guardrails, + methods=_methods, ) - visited_endpoints.add(f"{endpoint_id}:exact:{_path}") + # Generate route key with methods for tracking + methods_for_key = _methods if _methods else ["GET", "POST", "PUT", "DELETE", "PATCH"] + methods_str = ",".join(sorted(methods_for_key)) + visited_endpoints.add(f"{endpoint_id}:exact:{_path}:{methods_str}") # Add wildcard route for sub-paths if endpoint.get("include_subpath", False) is True: @@ -2191,9 +2227,10 @@ async def initialize_pass_through_endpoints( cost_per_request=endpoint.get("cost_per_request", None), endpoint_id=endpoint_id, guardrails=_guardrails, + methods=_methods, ) - visited_endpoints.add(f"{endpoint_id}:subpath:{_path}") + visited_endpoints.add(f"{endpoint_id}:subpath:{_path}:{methods_str}") verbose_proxy_logger.debug( "Added new pass through endpoint: %s (ID: %s)", _path, endpoint_id @@ -2508,6 +2545,7 @@ async def update_pass_through_endpoints( cost_per_request=updated_endpoint.cost_per_request, endpoint_id=updated_endpoint.id or endpoint_id or "", guardrails=getattr(updated_endpoint, "guardrails", None), + methods=updated_endpoint.methods, ) else: InitPassThroughEndpointHelpers.add_exact_path_route( @@ -2521,6 +2559,7 @@ async def update_pass_through_endpoints( cost_per_request=updated_endpoint.cost_per_request, endpoint_id=updated_endpoint.id or endpoint_id or "", guardrails=getattr(updated_endpoint, "guardrails", None), + methods=updated_endpoint.methods, ) return PassThroughEndpointResponse( @@ -2597,6 +2636,7 @@ async def create_pass_through_endpoints( cost_per_request=created_endpoint.cost_per_request, endpoint_id=created_endpoint.id or "", guardrails=getattr(created_endpoint, "guardrails", None), + methods=created_endpoint.methods, ) else: InitPassThroughEndpointHelpers.add_exact_path_route( @@ -2610,6 +2650,7 @@ async def create_pass_through_endpoints( cost_per_request=created_endpoint.cost_per_request, endpoint_id=created_endpoint.id or "", guardrails=getattr(created_endpoint, "guardrails", None), + methods=created_endpoint.methods, ) return PassThroughEndpointResponse(endpoints=[created_endpoint]) From 4e111d437204f6be74500b424b8b3c36a2fa9c5d Mon Sep 17 00:00:00 2001 From: Sameer Kankute Date: Thu, 19 Feb 2026 11:58:48 +0530 Subject: [PATCH 2/8] Add test got method speicifc routing --- .../test_method_specific_routing.py | 155 ++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 tests/test_litellm/proxy/pass_through_endpoints/test_method_specific_routing.py diff --git a/tests/test_litellm/proxy/pass_through_endpoints/test_method_specific_routing.py b/tests/test_litellm/proxy/pass_through_endpoints/test_method_specific_routing.py new file mode 100644 index 00000000000..7e5b9ff6403 --- /dev/null +++ b/tests/test_litellm/proxy/pass_through_endpoints/test_method_specific_routing.py @@ -0,0 +1,155 @@ +""" +Test method-specific routing for pass-through endpoints. + +This test demonstrates the ability to configure different targets +for the same path but different HTTP methods. +""" + +import pytest + +from litellm.proxy._types import PassThroughGenericEndpoint + + +def test_pass_through_endpoint_with_methods(): + """Test creating pass-through endpoints with specific methods""" + + # Create endpoint for GET /azure/kb + get_endpoint = PassThroughGenericEndpoint( + id="get-azure-kb", + path="/azure/kb", + target="https://api1.example.com/knowledge-base", + methods=["GET"], + headers={"Authorization": "Bearer token1"}, + ) + + assert get_endpoint.path == "/azure/kb" + assert get_endpoint.methods == ["GET"] + assert get_endpoint.target == "https://api1.example.com/knowledge-base" + + # Create endpoint for POST /azure/kb + post_endpoint = PassThroughGenericEndpoint( + id="post-azure-kb", + path="/azure/kb", + target="https://api2.example.com/knowledge-base", + methods=["POST"], + headers={"Authorization": "Bearer token2"}, + ) + + assert post_endpoint.path == "/azure/kb" + assert post_endpoint.methods == ["POST"] + assert post_endpoint.target == "https://api2.example.com/knowledge-base" + + # These should be different endpoints despite same path + assert get_endpoint.id != post_endpoint.id + assert get_endpoint.target != post_endpoint.target + + +def test_pass_through_endpoint_multiple_methods(): + """Test creating endpoint with multiple methods""" + + endpoint = PassThroughGenericEndpoint( + id="multi-method", + path="/azure/kb", + target="https://api.example.com/kb", + methods=["GET", "POST", "PUT"], + headers={}, + ) + + assert len(endpoint.methods) == 3 + assert "GET" in endpoint.methods + assert "POST" in endpoint.methods + assert "PUT" in endpoint.methods + + +def test_pass_through_endpoint_no_methods_backward_compatibility(): + """Test that endpoints without methods field work (backward compatibility)""" + + # When methods is None, all methods should be supported + endpoint = PassThroughGenericEndpoint( + id="all-methods", + path="/azure/kb", + target="https://api.example.com/kb", + headers={}, + ) + + assert endpoint.methods is None # Default is None for backward compatibility + + +def test_pass_through_endpoint_serialization(): + """Test that endpoints with methods can be serialized/deserialized""" + + endpoint = PassThroughGenericEndpoint( + id="test-endpoint", + path="/test", + target="https://api.example.com", + methods=["GET", "POST"], + headers={"key": "value"}, + cost_per_request=0.5, + ) + + # Serialize to dict + endpoint_dict = endpoint.model_dump() + assert endpoint_dict["methods"] == ["GET", "POST"] + + # Deserialize from dict + restored_endpoint = PassThroughGenericEndpoint(**endpoint_dict) + assert restored_endpoint.methods == ["GET", "POST"] + assert restored_endpoint.path == "/test" + assert restored_endpoint.target == "https://api.example.com" + + +def test_route_key_generation_with_methods(): + """Test that route keys include methods for uniqueness""" + from litellm.proxy.pass_through_endpoints.pass_through_endpoints import ( + InitPassThroughEndpointHelpers, + ) + + # Simulate how route keys are generated + endpoint_id_1 = "endpoint-1" + path = "/azure/kb" + methods_1 = ["GET"] + methods_str_1 = ",".join(sorted(methods_1)) + route_key_1 = f"{endpoint_id_1}:exact:{path}:{methods_str_1}" + + endpoint_id_2 = "endpoint-2" + methods_2 = ["POST"] + methods_str_2 = ",".join(sorted(methods_2)) + route_key_2 = f"{endpoint_id_2}:exact:{path}:{methods_str_2}" + + # Keys should be different even though path is the same + assert route_key_1 != route_key_2 + assert route_key_1 == "endpoint-1:exact:/azure/kb:GET" + assert route_key_2 == "endpoint-2:exact:/azure/kb:POST" + + +def test_config_yaml_example(): + """ + Example configuration for config.yaml showing method-specific routing: + + general_settings: + pass_through_endpoints: + # GET endpoint for retrieving knowledge base + - id: "get-azure-kb" + path: "/azure/kb" + target: "https://read-api.example.com/kb" + methods: ["GET"] + headers: + Authorization: "bearer os.environ/READ_API_KEY" + + # POST endpoint for creating knowledge base entries + - id: "post-azure-kb" + path: "/azure/kb" + target: "https://write-api.example.com/kb" + methods: ["POST"] + headers: + Authorization: "bearer os.environ/WRITE_API_KEY" + + # PUT endpoint for updating knowledge base + - id: "put-azure-kb" + path: "/azure/kb" + target: "https://update-api.example.com/kb" + methods: ["PUT"] + headers: + Authorization: "bearer os.environ/UPDATE_API_KEY" + """ + pass From 5bd7bf1b3e77159dda17077471a68014b4482d8f Mon Sep 17 00:00:00 2001 From: Sameer Kankute Date: Thu, 19 Feb 2026 11:59:09 +0530 Subject: [PATCH 3/8] Add documentation for adding method --- docs/my-website/docs/proxy/pass_through.md | 43 ++++++++++++++++++ .../img/passthrough_method_setup.png | Bin 0 -> 78438 bytes 2 files changed, 43 insertions(+) create mode 100644 docs/my-website/img/passthrough_method_setup.png diff --git a/docs/my-website/docs/proxy/pass_through.md b/docs/my-website/docs/proxy/pass_through.md index cf8168764b8..e9c1d796969 100644 --- a/docs/my-website/docs/proxy/pass_through.md +++ b/docs/my-website/docs/proxy/pass_through.md @@ -166,6 +166,7 @@ general_settings: auth: boolean # Enable LiteLLM authentication (Enterprise) forward_headers: boolean # Forward all incoming headers include_subpath: boolean # If true, forwards requests to sub-paths (default: false) + methods: list[string] # Optional: HTTP methods (e.g., ["GET", "POST"]). If not specified, all methods are supported. headers: # Custom headers to add Authorization: string # Auth header for target API content-type: string # Request content type @@ -201,6 +202,48 @@ general_settings: --- +### Method-Specific Routing + +You can configure different target URLs for the same path using different HTTP methods. This is useful when different backends handle different operations: + + + +```yaml +general_settings: + pass_through_endpoints: + # GET requests to /azure/kb go to read API + - path: "/azure/kb" + target: "https://read-api.example.com/knowledge-base" + methods: ["GET"] + headers: + Authorization: "bearer os.environ/READ_API_KEY" + + # POST requests to /azure/kb go to write API + - path: "/azure/kb" + target: "https://write-api.example.com/knowledge-base" + methods: ["POST"] + headers: + Authorization: "bearer os.environ/WRITE_API_KEY" + + # PUT requests to /azure/kb go to update API + - path: "/azure/kb" + target: "https://update-api.example.com/knowledge-base" + methods: ["PUT"] + headers: + Authorization: "bearer os.environ/UPDATE_API_KEY" +``` + +**Key Points:** +- If `methods` is not specified, the endpoint supports all HTTP methods (GET, POST, PUT, DELETE, PATCH) +- Multiple endpoints can share the same path as long as they have different methods +- You can specify multiple methods for a single endpoint: `methods: ["GET", "POST"]` +- This allows you to route to different backends based on the operation type + +--- + ## Advanced: Custom Adapters For complex integrations (like Anthropic/Bedrock clients), you can create custom adapters that translate between different API schemas. diff --git a/docs/my-website/img/passthrough_method_setup.png b/docs/my-website/img/passthrough_method_setup.png new file mode 100644 index 0000000000000000000000000000000000000000..584e3b966c69149120e6618a15e00e7e0c1b3969 GIT binary patch literal 78438 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

<9%jyZ}@7RA=+E3K0buC*2z>E;B! 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 Date: Thu, 19 Feb 2026 11:59:36 +0530 Subject: [PATCH 4/8] Update Ui for adding method to passthrough endpoints --- .../src/components/add_pass_through.tsx | 45 ++++++++++++++++ .../PassThroughRoutesSelector.tsx | 31 ++++++++--- .../src/components/pass_through_info.tsx | 51 ++++++++++++++++++- .../src/components/pass_through_settings.tsx | 27 ++++++++++ 4 files changed, 147 insertions(+), 7 deletions(-) diff --git a/ui/litellm-dashboard/src/components/add_pass_through.tsx b/ui/litellm-dashboard/src/components/add_pass_through.tsx index ff724e42eb8..07850bca087 100644 --- a/ui/litellm-dashboard/src/components/add_pass_through.tsx +++ b/ui/litellm-dashboard/src/components/add_pass_through.tsx @@ -30,6 +30,8 @@ import PassThroughSecuritySection from "./common_components/PassThroughSecurityS import PassThroughGuardrailsSection from "./common_components/PassThroughGuardrailsSection"; const { Option } = Select2; +const HTTP_METHODS = ["GET", "POST", "PUT", "DELETE", "PATCH"]; + interface AddFallbacksProps { // models: string[] | undefined; accessToken: string; @@ -52,12 +54,14 @@ const AddPassThroughEndpoint: React.FC = ({ const [targetValue, setTargetValue] = useState(""); const [includeSubpath, setIncludeSubpath] = useState(true); const [authEnabled, setAuthEnabled] = useState(false); + const [selectedMethods, setSelectedMethods] = useState([]); const [guardrails, setGuardrails] = useState>({}); const handleCancel = () => { form.resetFields(); setPathValue(""); setTargetValue(""); setIncludeSubpath(true); + setSelectedMethods([]); setGuardrails({}); setIsModalVisible(false); }; @@ -86,6 +90,11 @@ const AddPassThroughEndpoint: React.FC = ({ formValues.guardrails = guardrails; } + // Add methods to formValues (only if specific methods are selected) + if (selectedMethods && selectedMethods.length > 0) { + formValues.methods = selectedMethods; + } + console.log(`formValues: ${JSON.stringify(formValues)}`); const response = await createPassThroughEndpoint(accessToken, formValues); @@ -101,6 +110,7 @@ const AddPassThroughEndpoint: React.FC = ({ setPathValue(""); setTargetValue(""); setIncludeSubpath(true); + setSelectedMethods([]); setGuardrails({}); setIsModalVisible(false); } catch (error) { @@ -204,6 +214,41 @@ const AddPassThroughEndpoint: React.FC = ({ /> + + HTTP Methods (Optional) + + + + + } + name="methods" + extra={ +

+ {selectedMethods.length === 0 + ? "All HTTP methods supported (default)" + : `Only ${selectedMethods.join(", ")} requests will be routed to this endpoint`} +
+ } + className="mb-4" + > + + {HTTP_METHODS.map((method) => ( + + ))} + + +
Include Subpaths
diff --git a/ui/litellm-dashboard/src/components/common_components/PassThroughRoutesSelector.tsx b/ui/litellm-dashboard/src/components/common_components/PassThroughRoutesSelector.tsx index 10482dffb2c..d80e3790c36 100644 --- a/ui/litellm-dashboard/src/components/common_components/PassThroughRoutesSelector.tsx +++ b/ui/litellm-dashboard/src/components/common_components/PassThroughRoutesSelector.tsx @@ -12,6 +12,11 @@ interface PassThroughRoutesSelectorProps { teamId?: string | null; } +interface PassThroughEndpoint { + path: string; + methods?: string[]; +} + const PassThroughRoutesSelector: React.FC = ({ onChange, value, @@ -21,7 +26,7 @@ const PassThroughRoutesSelector: React.FC = ({ disabled = false, teamId, }) => { - const [passThroughRoutes, setPassThroughRoutes] = useState([]); + const [passThroughRoutes, setPassThroughRoutes] = useState>([]); const [loading, setLoading] = useState(false); useEffect(() => { @@ -32,7 +37,24 @@ const PassThroughRoutesSelector: React.FC = ({ try { const response = await getPassThroughEndpointsCall(accessToken, teamId); if (response.endpoints) { - const routes = response.endpoints.map((route: { path: string }) => route.path); + const routes = response.endpoints.flatMap((endpoint: PassThroughEndpoint) => { + const path = endpoint.path; + const methods = endpoint.methods; + + // If methods are specified, create one entry per method + if (methods && methods.length > 0) { + return methods.map((method) => ({ + label: `${method} ${path}`, + value: path, // Keep value as path for backward compatibility + })); + } + + // If no methods specified, show just the path (all methods supported) + return [{ + label: path, + value: path, + }]; + }); setPassThroughRoutes(routes); } } catch (error) { @@ -54,10 +76,7 @@ const PassThroughRoutesSelector: React.FC = ({ loading={loading} className={className} allowClear - options={passThroughRoutes.map((route) => ({ - label: route, - value: route, - }))} + options={passThroughRoutes} optionFilterProp="label" showSearch style={{ width: "100%" }} diff --git a/ui/litellm-dashboard/src/components/pass_through_info.tsx b/ui/litellm-dashboard/src/components/pass_through_info.tsx index fe3b204b507..9a8d2a3a07f 100644 --- a/ui/litellm-dashboard/src/components/pass_through_info.tsx +++ b/ui/litellm-dashboard/src/components/pass_through_info.tsx @@ -13,7 +13,7 @@ import { TabPanels, TextInput, } from "@tremor/react"; -import { Button, Form, Input, Switch, InputNumber } from "antd"; +import { Button, Form, Input, Switch, InputNumber, Select } from "antd"; import { updatePassThroughEndpoint, deletePassThroughEndpointsCall } from "./networking"; import { Eye, EyeOff } from "lucide-react"; import RoutePreview from "./route_preview"; @@ -21,6 +21,9 @@ import NotificationsManager from "./molecules/notifications_manager"; import PassThroughSecuritySection from "./common_components/PassThroughSecuritySection"; import PassThroughGuardrailsSection from "./common_components/PassThroughGuardrailsSection"; +const HTTP_METHODS = ["GET", "POST", "PUT", "DELETE", "PATCH"]; +const { Option } = Select; + export interface PassThroughInfoProps { endpointData: PassThroughEndpoint; onClose: () => void; @@ -38,6 +41,7 @@ interface PassThroughEndpoint { include_subpath?: boolean; cost_per_request?: number; auth?: boolean; + methods?: string[]; guardrails?: Record; } @@ -70,6 +74,7 @@ const PassThroughInfoView: React.FC = ({ const [loading, setLoading] = useState(false); const [isEditing, setIsEditing] = useState(false); const [authEnabled, setAuthEnabled] = useState(initialEndpointData?.auth || false); + const [selectedMethods, setSelectedMethods] = useState(initialEndpointData?.methods || []); const [guardrails, setGuardrails] = useState>( initialEndpointData?.guardrails || {} ); @@ -97,6 +102,7 @@ const PassThroughInfoView: React.FC = ({ include_subpath: values.include_subpath, cost_per_request: values.cost_per_request, auth: premiumUser ? values.auth : undefined, + methods: selectedMethods && selectedMethods.length > 0 ? selectedMethods : undefined, guardrails: guardrails && Object.keys(guardrails).length > 0 ? guardrails : undefined, }; @@ -191,6 +197,23 @@ const PassThroughInfoView: React.FC = ({ {endpointData.auth ? "Auth Required" : "No Auth"}
+ {endpointData.methods && endpointData.methods.length > 0 && ( +
+ HTTP Methods: +
+ {endpointData.methods.map((method) => ( + + {method} + + ))} +
+
+ )} + {(!endpointData.methods || endpointData.methods.length === 0) && ( +
+ All HTTP methods supported +
+ )} {endpointData.cost_per_request !== undefined && (
Cost per request: ${endpointData.cost_per_request} @@ -277,6 +300,7 @@ const PassThroughInfoView: React.FC = ({ include_subpath: endpointData.include_subpath || false, cost_per_request: endpointData.cost_per_request, auth: endpointData.auth || false, + methods: endpointData.methods || [], }} layout="vertical" > @@ -295,6 +319,31 @@ const PassThroughInfoView: React.FC = ({ /> + + + + diff --git a/ui/litellm-dashboard/src/components/pass_through_settings.tsx b/ui/litellm-dashboard/src/components/pass_through_settings.tsx index b37d3df7e41..4c2de266384 100644 --- a/ui/litellm-dashboard/src/components/pass_through_settings.tsx +++ b/ui/litellm-dashboard/src/components/pass_through_settings.tsx @@ -39,6 +39,7 @@ export interface passThroughItem { include_subpath?: boolean; cost_per_request?: number; auth?: boolean; + methods?: string[]; guardrails?: Record; } @@ -147,6 +148,32 @@ const PassThroughSettings: React.FC = ({ accessToken, accessorKey: "target", cell: (info: any) => {info.getValue()}, }, + { + header: () => ( +
+ Methods + + + +
+ ), + accessorKey: "methods", + cell: (info: any) => { + const methods = info.getValue(); + if (!methods || methods.length === 0) { + return ALL; + } + return ( +
+ {methods.map((method: string) => ( + + {method} + + ))} +
+ ); + }, + }, { header: () => (
From 4a50c55d84ae20659cc0a1a5673030f67eaea407 Mon Sep 17 00:00:00 2001 From: Sameer Kankute Date: Thu, 19 Feb 2026 12:48:03 +0530 Subject: [PATCH 5/8] Add allow defining default query params for a pass through --- docs/my-website/docs/proxy/pass_through.md | 70 +++++++++++++++++- .../img/passthrough_query_default.png | Bin 0 -> 85983 bytes litellm/passthrough/utils.py | 19 ++++- litellm/proxy/_types.py | 4 + .../pass_through_endpoints.py | 27 ++++++- 5 files changed, 113 insertions(+), 7 deletions(-) create mode 100644 docs/my-website/img/passthrough_query_default.png diff --git a/docs/my-website/docs/proxy/pass_through.md b/docs/my-website/docs/proxy/pass_through.md index e9c1d796969..f47d7064140 100644 --- a/docs/my-website/docs/proxy/pass_through.md +++ b/docs/my-website/docs/proxy/pass_through.md @@ -58,6 +58,17 @@ Configure the required authentication and pricing: - The Bria API requires an `api_token` header - Enter your Bria API key as the value for the `api_token` header +**Default Query Parameters (Optional):** +- Add query parameters that will be automatically sent with every request +- Perfect for API versioning, format specifications, or default configurations +- Clients can override these parameters by providing their own values +- Example: `version=v1`, `format=json`, `timeout=30` + + + **Pricing Configuration:** - Set a cost per request (e.g., $12.00 in this example) - This enables cost tracking and billing for your users @@ -112,6 +123,9 @@ general_settings: content-type: application/json accept: application/json forward_headers: true # Forward all incoming headers + default_query_params: # Optional: Default query parameters + version: "v1" # Always send version=v1 + format: "json" # Default format (can be overridden) ``` ### Start and Test @@ -167,6 +181,8 @@ general_settings: forward_headers: boolean # Forward all incoming headers include_subpath: boolean # If true, forwards requests to sub-paths (default: false) methods: list[string] # Optional: HTTP methods (e.g., ["GET", "POST"]). If not specified, all methods are supported. + default_query_params: # Optional: Default query parameters sent with every request + : string # Key-value pairs (e.g., version: "v1", format: "json") headers: # Custom headers to add Authorization: string # Auth header for target API content-type: string # Request content type @@ -178,11 +194,17 @@ general_settings: ### Header Options - **Authorization**: Authentication for the target API -- **content-type**: Request body format specification +- **content-type**: Request body format specification - **accept**: Expected response format - **LANGFUSE_PUBLIC_KEY/SECRET_KEY**: For Langfuse integration - **Custom headers**: Any additional key-value pairs +### Default Query Parameters +- **Parameter precedence**: Client params > URL params > default params +- **Use cases**: API versioning, authentication tokens, format control, feature flags +- **Override capability**: Clients can override any default parameter +- **Examples**: `version: "v1"`, `format: "json"`, `timeout: "30"` + ### Sub-path Routing By default, pass-through endpoints only match the **exact path** specified. To forward requests to sub-paths, set `include_subpath: true`: @@ -202,7 +224,51 @@ general_settings: --- -### Method-Specific Routing +### Default Query Parameters + +Pass-through endpoints support default query parameters that are automatically added to every request. This is useful for API versioning, format specifications, authentication tokens, or any default configuration. + +#### How It Works + +**Parameter Precedence (highest to lowest priority):** +1. **Client-provided parameters** (in the request URL) +2. **URL parameters** (from the target URL) +3. **Default parameters** (from configuration) + +#### Example Configuration + +```yaml +general_settings: + pass_through_endpoints: + - path: "/api/v1" + target: "https://external-api.com/service?timeout=60" # URL has timeout=60 + default_query_params: + version: "v1" # Always add version=v1 + format: "json" # Default format=json (can be overridden) + auth_level: "basic" # Always add auth_level=basic +``` + +#### Request Examples + +**Client Request:** `GET /api/v1/users` +**Actual Backend Call:** `https://external-api.com/service?version=v1&format=json&auth_level=basic&timeout=60` + +**Client Request:** `GET /api/v1/users?format=xml&custom=value` +**Actual Backend Call:** `https://external-api.com/service?version=v1&auth_level=basic&timeout=60&format=xml&custom=value` +- Client `format=xml` overrides default `format=json` +- Default `version=v1` and `auth_level=basic` are preserved +- URL `timeout=60` is preserved +- Client `custom=value` is added + +#### Use Cases + +- **API Versioning**: Always send `version=v2` to maintain compatibility +- **Authentication**: Add authentication tokens like `api_key=default_key` +- **Format Control**: Default to `format=json` but allow client override +- **Rate Limiting**: Set `rate_limit=standard` as default +- **Feature Flags**: Enable `experimental=false` by default + +--- You can configure different target URLs for the same path using different HTTP methods. This is useful when different backends handle different operations: diff --git a/docs/my-website/img/passthrough_query_default.png b/docs/my-website/img/passthrough_query_default.png new file mode 100644 index 0000000000000000000000000000000000000000..fb97e69001e1acdf892d1a41cc72b443f248336b GIT binary patch literal 85983 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 z�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 literal 0 HcmV?d00001 diff --git a/litellm/passthrough/utils.py b/litellm/passthrough/utils.py index fbbf9cd2581..74af02e5e62 100644 --- a/litellm/passthrough/utils.py +++ b/litellm/passthrough/utils.py @@ -9,7 +9,9 @@ from litellm.constants import PASS_THROUGH_HEADER_PREFIX class BasePassthroughUtils: @staticmethod def get_merged_query_parameters( - existing_url: httpx.URL, request_query_params: Dict[str, Union[str, list]] + existing_url: httpx.URL, + request_query_params: Dict[str, Union[str, list]], + default_query_params: Optional[Dict[str, Union[str, list]]] = None ) -> Dict[str, Union[str, List[str]]]: # Get the existing query params from the target URL existing_query_string = existing_url.query.decode("utf-8") @@ -19,8 +21,19 @@ class BasePassthroughUtils: updated_existing_query_params = { k: v[0] if len(v) == 1 else v for k, v in existing_query_params.items() } - # Merge the query params, giving priority to the existing ones - return {**request_query_params, **updated_existing_query_params} + + # Start with default query params (lowest priority) + merged_params = {} + if default_query_params: + merged_params.update(default_query_params) + + # Override with existing URL query params (medium priority) + merged_params.update(updated_existing_query_params) + + # Override with request query params (highest priority - client can override anything) + merged_params.update(request_query_params) + + return merged_params @staticmethod def forward_headers_from_request( diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index e94e41992d7..2a4fb89fd08 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -1909,6 +1909,10 @@ class PassThroughGenericEndpoint(LiteLLMPydanticObjectBase): default={}, description="Key-value pairs of headers to be forwarded with the request. You can set any key value pair here and it will be forwarded to your target endpoint", ) + default_query_params: dict = Field( + default={}, + description="Key-value pairs of default query parameters to be sent with every request to this endpoint. These can be overridden by client-provided query parameters. For example: {'key': 'default_value', 'api_version': '2023-01'}", + ) include_subpath: bool = Field( default=False, description="If True, requests to subpaths of the path will be forwarded to the target endpoint. For example, if the path is /bria and include_subpath is True, requests to /bria/v1/text-to-image/base/2.3 will be forwarded to the target endpoint.", diff --git a/litellm/proxy/pass_through_endpoints/pass_through_endpoints.py b/litellm/proxy/pass_through_endpoints/pass_through_endpoints.py index 20a446bd29b..76308e08187 100644 --- a/litellm/proxy/pass_through_endpoints/pass_through_endpoints.py +++ b/litellm/proxy/pass_through_endpoints/pass_through_endpoints.py @@ -600,6 +600,7 @@ async def pass_through_request( # noqa: PLR0915 forward_headers: Optional[bool] = False, merge_query_params: Optional[bool] = False, query_params: Optional[dict] = None, + default_query_params: Optional[dict] = None, stream: Optional[bool] = None, cost_per_request: Optional[float] = None, custom_llm_provider: Optional[str] = None, @@ -617,6 +618,7 @@ async def pass_through_request( # noqa: PLR0915 forward_headers: Whether to forward headers merge_query_params: Whether to merge query params query_params: The query params + default_query_params: The default query params to be applied if not overridden by client stream: Whether to stream the response cost_per_request: Optional field - cost per request to the target endpoint custom_llm_provider: Optional field - custom LLM provider for the endpoint @@ -649,13 +651,18 @@ async def pass_through_request( # noqa: PLR0915 forward_headers=forward_headers, ) - if merge_query_params: + # Apply default query parameters if provided, regardless of merge_query_params setting + if default_query_params or merge_query_params: + # Determine what to merge based on settings + request_params = dict(request.query_params) if merge_query_params else {} + # Create a new URL with the merged query params url = url.copy_with( query=urlencode( HttpPassThroughEndpointHelpers.get_merged_query_parameters( existing_url=url, - request_query_params=dict(request.query_params), + request_query_params=request_params, + default_query_params=default_query_params, ) ).encode("ascii") ) @@ -1080,6 +1087,7 @@ def create_pass_through_route( custom_llm_provider: Optional[str] = None, is_streaming_request: Optional[bool] = False, query_params: Optional[dict] = None, + default_query_params: Optional[dict] = None, guardrails: Optional[Dict[str, Any]] = None, ): # check if target is an adapter.py or a url @@ -1171,6 +1179,7 @@ def create_pass_through_route( "cost_per_request", cost_per_request ) param_guardrails = target_params.get("guardrails", None) + param_default_query_params = target_params.get("default_query_params", None) # Construct the full target URL with subpath if needed full_target = ( @@ -1208,6 +1217,7 @@ def create_pass_through_route( forward_headers=cast(Optional[bool], param_forward_headers), merge_query_params=cast(Optional[bool], param_merge_query_params), query_params=final_query_params, + default_query_params=param_default_query_params, stream=is_streaming_request or stream, custom_body=final_custom_body, cost_per_request=cast(Optional[float], param_cost_per_request), @@ -1849,6 +1859,7 @@ class InitPassThroughEndpointHelpers: endpoint_id: str, guardrails: Optional[dict] = None, methods: Optional[List[str]] = None, + default_query_params: Optional[dict] = None, ): """Add exact path route for pass-through endpoint""" # Default to all methods if none specified (backward compatibility) @@ -1886,6 +1897,7 @@ class InitPassThroughEndpointHelpers: merge_query_params, dependencies, cost_per_request=cost_per_request, + default_query_params=default_query_params, guardrails=guardrails, ), methods=methods, @@ -1903,6 +1915,7 @@ class InitPassThroughEndpointHelpers: "custom_headers": custom_headers, "forward_headers": forward_headers, "merge_query_params": merge_query_params, + "default_query_params": default_query_params, "dependencies": dependencies, "cost_per_request": cost_per_request, "guardrails": guardrails, @@ -1922,6 +1935,7 @@ class InitPassThroughEndpointHelpers: endpoint_id: str, guardrails: Optional[dict] = None, methods: Optional[List[str]] = None, + default_query_params: Optional[dict] = None, ): """Add wildcard route for sub-paths""" # Default to all methods if none specified (backward compatibility) @@ -1960,6 +1974,7 @@ class InitPassThroughEndpointHelpers: dependencies, include_subpath=True, cost_per_request=cost_per_request, + default_query_params=default_query_params, guardrails=guardrails, ), methods=methods, @@ -1977,6 +1992,7 @@ class InitPassThroughEndpointHelpers: "custom_headers": custom_headers, "forward_headers": forward_headers, "merge_query_params": merge_query_params, + "default_query_params": default_query_params, "dependencies": dependencies, "cost_per_request": cost_per_request, "guardrails": guardrails, @@ -2170,6 +2186,7 @@ async def initialize_pass_through_endpoints( ) _forward_headers = endpoint.get("forward_headers", None) _merge_query_params = endpoint.get("merge_query_params", None) + _default_query_params = endpoint.get("default_query_params", None) _auth = endpoint.get("auth", None) _dependencies = None if _auth is not None and str(_auth).lower() == "true": @@ -2207,6 +2224,7 @@ async def initialize_pass_through_endpoints( endpoint_id=endpoint_id, guardrails=_guardrails, methods=_methods, + default_query_params=_default_query_params, ) # Generate route key with methods for tracking @@ -2228,6 +2246,7 @@ async def initialize_pass_through_endpoints( endpoint_id=endpoint_id, guardrails=_guardrails, methods=_methods, + default_query_params=_default_query_params, ) visited_endpoints.add(f"{endpoint_id}:subpath:{_path}:{methods_str}") @@ -2546,6 +2565,7 @@ async def update_pass_through_endpoints( endpoint_id=updated_endpoint.id or endpoint_id or "", guardrails=getattr(updated_endpoint, "guardrails", None), methods=updated_endpoint.methods, + default_query_params=updated_endpoint.default_query_params, ) else: InitPassThroughEndpointHelpers.add_exact_path_route( @@ -2560,6 +2580,7 @@ async def update_pass_through_endpoints( endpoint_id=updated_endpoint.id or endpoint_id or "", guardrails=getattr(updated_endpoint, "guardrails", None), methods=updated_endpoint.methods, + default_query_params=updated_endpoint.default_query_params, ) return PassThroughEndpointResponse( @@ -2637,6 +2658,7 @@ async def create_pass_through_endpoints( endpoint_id=created_endpoint.id or "", guardrails=getattr(created_endpoint, "guardrails", None), methods=created_endpoint.methods, + default_query_params=created_endpoint.default_query_params, ) else: InitPassThroughEndpointHelpers.add_exact_path_route( @@ -2651,6 +2673,7 @@ async def create_pass_through_endpoints( endpoint_id=created_endpoint.id or "", guardrails=getattr(created_endpoint, "guardrails", None), methods=created_endpoint.methods, + default_query_params=created_endpoint.default_query_params, ) return PassThroughEndpointResponse(endpoints=[created_endpoint]) From 1ceb7d8e29aa543522118ada992467d31d4f9a55 Mon Sep 17 00:00:00 2001 From: Sameer Kankute Date: Thu, 19 Feb 2026 12:48:27 +0530 Subject: [PATCH 6/8] Add default query param in UI --- .../src/components/add_pass_through.tsx | 29 ++++++++++ .../src/components/pass_through_settings.tsx | 1 + .../src/components/query_param_input.tsx | 57 +++++++++++++++++++ 3 files changed, 87 insertions(+) create mode 100644 ui/litellm-dashboard/src/components/query_param_input.tsx diff --git a/ui/litellm-dashboard/src/components/add_pass_through.tsx b/ui/litellm-dashboard/src/components/add_pass_through.tsx index 07850bca087..af55a7919a9 100644 --- a/ui/litellm-dashboard/src/components/add_pass_through.tsx +++ b/ui/litellm-dashboard/src/components/add_pass_through.tsx @@ -23,6 +23,7 @@ import { ApiOutlined, } from "@ant-design/icons"; import KeyValueInput from "./key_value_input"; +import QueryParamInput from "./query_param_input"; import { passThroughItem } from "./pass_through_settings"; import RoutePreview from "./route_preview"; import NotificationsManager from "./molecules/notifications_manager"; @@ -295,6 +296,34 @@ const AddPassThroughEndpoint: React.FC = ({ + {/* Default Query Parameters Section */} + + Default Query Parameters + + Add query parameters that will be automatically sent with every request to the target API + + + + Default Query Parameters (Optional) + + + + + } + name="default_query_params" + extra={ +
+
Parameters are sent with all GET, POST, PUT, PATCH requests
+
Client parameters override defaults. Examples: version=v1, format=json, key=default
+
+ } + > + +
+
+ {/* Security Section */} ; + default_query_params?: Record; } // Password field component for headers diff --git a/ui/litellm-dashboard/src/components/query_param_input.tsx b/ui/litellm-dashboard/src/components/query_param_input.tsx new file mode 100644 index 00000000000..4a98ab48bca --- /dev/null +++ b/ui/litellm-dashboard/src/components/query_param_input.tsx @@ -0,0 +1,57 @@ +import React, { useState } from "react"; +import { Button, Space } from "antd"; +import { MinusCircleOutlined, PlusOutlined } from "@ant-design/icons"; +import { TextInput } from "@tremor/react"; + +interface QueryParamInputProps { + value?: Record; + onChange?: (value: Record) => void; +} + +const QueryParamInput: React.FC = ({ value = {}, onChange }) => { + const [pairs, setPairs] = useState<[string, string][]>(Object.entries(value)); + + const handleAdd = () => { + setPairs([...pairs, ["", ""]]); + }; + + const handleRemove = (index: number) => { + const newPairs = pairs.filter((_, i) => i !== index); + setPairs(newPairs); + onChange?.(Object.fromEntries(newPairs)); + }; + + const handleChange = (index: number, key: string, val: string) => { + const newPairs = [...pairs]; + newPairs[index] = [key, val]; + setPairs(newPairs); + onChange?.(Object.fromEntries(newPairs)); + }; + + return ( +
+ {pairs.map(([key, val], index) => ( + + handleChange(index, e.target.value, val)} + /> + handleChange(index, key, e.target.value)} + /> +
+ handleRemove(index)} style={{ cursor: "pointer" }} /> +
+
+ ))} + +
+ ); +}; + +export default QueryParamInput; \ No newline at end of file From 0771ea8d427f3c985d9ca32bb53bce6bc59eeaa8 Mon Sep 17 00:00:00 2001 From: Sameer Kankute Date: Thu, 19 Feb 2026 13:27:50 +0530 Subject: [PATCH 7/8] fix log --- litellm/proxy/pass_through_endpoints/pass_through_endpoints.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/proxy/pass_through_endpoints/pass_through_endpoints.py b/litellm/proxy/pass_through_endpoints/pass_through_endpoints.py index 76308e08187..6be550d5a5b 100644 --- a/litellm/proxy/pass_through_endpoints/pass_through_endpoints.py +++ b/litellm/proxy/pass_through_endpoints/pass_through_endpoints.py @@ -1873,7 +1873,7 @@ class InitPassThroughEndpointHelpers: # Check if this exact route is already registered if route_key in _registered_pass_through_routes: verbose_proxy_logger.debug( - "Updating duplicate exact pass through endpoint: %s (already registered)", + "Updating duplicate exact pass through endpoint: %s with methods %s (already registered)", path, methods, ) From ca91814b8518878f5531fddfa240258c88df7e8f Mon Sep 17 00:00:00 2001 From: Sameer Kankute Date: Thu, 19 Feb 2026 19:33:34 +0530 Subject: [PATCH 8/8] rrevert changes --- litellm/proxy/pass_through_endpoints/pass_through_endpoints.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/proxy/pass_through_endpoints/pass_through_endpoints.py b/litellm/proxy/pass_through_endpoints/pass_through_endpoints.py index 8396ac8dc90..883e90f8fef 100644 --- a/litellm/proxy/pass_through_endpoints/pass_through_endpoints.py +++ b/litellm/proxy/pass_through_endpoints/pass_through_endpoints.py @@ -1877,7 +1877,7 @@ class InitPassThroughEndpointHelpers: # Check if this exact route is already registered if route_key in _registered_pass_through_routes: verbose_proxy_logger.debug( - "Updating duplicate exact pass through endpoint: %s (already registered)", + "Updating duplicate exact pass through endpoint: %s with methods %s (already registered)", path, methods, )