diff --git a/litellm/constants.py b/litellm/constants.py
index 97631b9997a..d811f193fa9 100644
--- a/litellm/constants.py
+++ b/litellm/constants.py
@@ -1083,6 +1083,7 @@ openai_compatible_endpoints: Final[list[str]] = [
"https://api.inference.wandb.ai/v1",
"https://api.clarifai.com/v2/ext/openai/v1",
"https://api.libertai.io/v1",
+ "https://api.trustedrouter.com/v1",
"https://pinstripes.io/v1",
"https://api.meta.ai/v1",
"https://api.sailresearch.com/v1",
@@ -1143,6 +1144,7 @@ openai_compatible_providers: Final[list[str]] = [
"chutes", # Chutes - JSON-configured provider
"parasail", # Parasail - JSON-configured provider
"libertai", # LibertAI - JSON-configured provider
+ "trustedrouter", # TrustedRouter - JSON-configured provider
"featherless_ai",
"nscale",
"nebius",
diff --git a/litellm/llms/openai_like/providers.json b/litellm/llms/openai_like/providers.json
index a71a9c3bb9b..0f85d295ecd 100644
--- a/litellm/llms/openai_like/providers.json
+++ b/litellm/llms/openai_like/providers.json
@@ -302,5 +302,11 @@
"preserve_cache_control": true
},
"supported_endpoints": ["/v1/chat/completions"]
+ },
+ "trustedrouter": {
+ "base_url": "https://api.trustedrouter.com/v1",
+ "api_key_env": "TRUSTEDROUTER_API_KEY",
+ "api_base_env": "TRUSTEDROUTER_API_BASE",
+ "supported_endpoints": ["/v1/chat/completions", "/v1/responses"]
}
}
diff --git a/litellm/proxy/public_endpoints/provider_create_fields.json b/litellm/proxy/public_endpoints/provider_create_fields.json
index aa7554c4a5a..b5da6d09e4f 100644
--- a/litellm/proxy/public_endpoints/provider_create_fields.json
+++ b/litellm/proxy/public_endpoints/provider_create_fields.json
@@ -4452,5 +4452,33 @@
}
],
"default_model_placeholder": "bigmodel/glm-5.3"
+ },
+ {
+ "provider": "Trustedrouter",
+ "provider_display_name": "TrustedRouter",
+ "litellm_provider": "trustedrouter",
+ "credential_fields": [
+ {
+ "key": "api_key",
+ "label": "TrustedRouter API Key",
+ "placeholder": "Your TrustedRouter API key from trustedrouter.com",
+ "tooltip": "Get your API key from the TrustedRouter dashboard at trustedrouter.com",
+ "required": true,
+ "field_type": "password",
+ "options": null,
+ "default_value": null
+ },
+ {
+ "key": "api_base",
+ "label": "API Base",
+ "placeholder": "https://api.trustedrouter.com/v1",
+ "tooltip": "TrustedRouter API base URL (defaults to https://api.trustedrouter.com/v1)",
+ "required": false,
+ "field_type": "text",
+ "options": null,
+ "default_value": null
+ }
+ ],
+ "default_model_placeholder": "trustedrouter/auto"
}
]
diff --git a/litellm/types/utils.py b/litellm/types/utils.py
index 57f4d971eb3..c75cec21fe8 100644
--- a/litellm/types/utils.py
+++ b/litellm/types/utils.py
@@ -4741,6 +4741,7 @@ class LlmProviders(str, Enum):
XIAOMI_MIMO = "xiaomi_mimo"
TENSORMESH = "tensormesh"
LIBERTAI = "libertai"
+ TRUSTEDROUTER = "trustedrouter"
PINSTRIPES = "pinstripes"
COGNITION = "cognition"
CORALBRICKS = "coralbricks"
diff --git a/provider_endpoints_support.json b/provider_endpoints_support.json
index 40ea9d15ff4..6907ed0cce0 100644
--- a/provider_endpoints_support.json
+++ b/provider_endpoints_support.json
@@ -5483,6 +5483,23 @@
"a2a": true,
"generateContent": true
}
+ },
+ "trustedrouter": {
+ "display_name": "TrustedRouter (`trustedrouter`)",
+ "url": "https://docs.litellm.ai/docs/providers/trustedrouter",
+ "endpoints": {
+ "chat_completions": true,
+ "messages": false,
+ "responses": true,
+ "embeddings": false,
+ "image_generations": false,
+ "audio_transcriptions": false,
+ "audio_speech": false,
+ "moderations": false,
+ "batches": false,
+ "rerank": false,
+ "a2a": false
+ }
}
},
"endpoints": {
diff --git a/tests/unit/llms/openai_like/test_trustedrouter_provider.py b/tests/unit/llms/openai_like/test_trustedrouter_provider.py
new file mode 100644
index 00000000000..d83fe14181f
--- /dev/null
+++ b/tests/unit/llms/openai_like/test_trustedrouter_provider.py
@@ -0,0 +1,59 @@
+import os
+from unittest.mock import patch
+
+TRUSTEDROUTER_API_BASE = "https://api.trustedrouter.com/v1"
+
+
+def test_trustedrouter_json_registry():
+ import litellm
+ from litellm.llms.openai_like.json_loader import JSONProviderRegistry
+
+ assert litellm.LlmProviders.TRUSTEDROUTER.value == "trustedrouter"
+ assert litellm.LlmProviders("trustedrouter") == litellm.LlmProviders.TRUSTEDROUTER
+ assert JSONProviderRegistry.exists("trustedrouter")
+ config = JSONProviderRegistry.get("trustedrouter")
+ assert config is not None
+ assert config.base_url == TRUSTEDROUTER_API_BASE
+ assert config.api_key_env == "TRUSTEDROUTER_API_KEY"
+ assert config.api_base_env == "TRUSTEDROUTER_API_BASE"
+ assert "/v1/chat/completions" in config.supported_endpoints
+ assert "/v1/responses" in config.supported_endpoints
+
+
+def test_trustedrouter_listed_in_openai_compatible_providers():
+ from litellm.constants import (
+ openai_compatible_endpoints,
+ openai_compatible_providers,
+ )
+
+ assert "trustedrouter" in openai_compatible_providers
+ assert TRUSTEDROUTER_API_BASE in openai_compatible_endpoints
+
+
+def test_trustedrouter_dynamic_config_env_vars():
+ from litellm.llms.openai_like.dynamic_config import create_config_class
+ from litellm.llms.openai_like.json_loader import JSONProviderRegistry
+
+ config = create_config_class(JSONProviderRegistry.get("trustedrouter"))()
+
+ with patch.dict(
+ os.environ,
+ {
+ "TRUSTEDROUTER_API_KEY": "test-key",
+ "TRUSTEDROUTER_API_BASE": "https://example.com/v1",
+ },
+ ):
+ api_base, api_key = config._get_openai_compatible_provider_info(None, None)
+
+ assert api_base == "https://example.com/v1"
+ assert api_key == "test-key"
+
+
+def test_trustedrouter_provider_detection_by_prefix():
+ from litellm.litellm_core_utils.get_llm_provider_logic import get_llm_provider
+
+ model, provider, _, api_base = get_llm_provider("trustedrouter/zdr")
+
+ assert model == "zdr"
+ assert provider == "trustedrouter"
+ assert api_base == TRUSTEDROUTER_API_BASE
diff --git a/ui/litellm-dashboard/public/assets/logos/trustedrouter.svg b/ui/litellm-dashboard/public/assets/logos/trustedrouter.svg
new file mode 100644
index 00000000000..b4d9f4cd233
--- /dev/null
+++ b/ui/litellm-dashboard/public/assets/logos/trustedrouter.svg
@@ -0,0 +1,7 @@
+
diff --git a/ui/litellm-dashboard/src/components/provider_info_helpers.tsx b/ui/litellm-dashboard/src/components/provider_info_helpers.tsx
index 1680258e10b..2cc54741ba7 100644
--- a/ui/litellm-dashboard/src/components/provider_info_helpers.tsx
+++ b/ui/litellm-dashboard/src/components/provider_info_helpers.tsx
@@ -49,6 +49,7 @@ import nvidiaTritonLogo from "../../public/assets/logos/nvidia_triton.png";
import ollamaLogo from "../../public/assets/logos/ollama.svg";
import openaiSmallLogo from "../../public/assets/logos/openai_small.svg";
import openrouterLogo from "../../public/assets/logos/openrouter.svg";
+import trustedrouterLogo from "../../public/assets/logos/trustedrouter.svg";
import oracleLogo from "../../public/assets/logos/oracle.svg";
import parallelAiLogo from "../../public/assets/logos/parallel_ai.png";
import perplexityAiLogo from "../../public/assets/logos/perplexity-ai.svg";
@@ -190,6 +191,7 @@ export enum Providers {
TogetherAI = "TogetherAI",
TOPAZ = "Topaz",
Triton = "Triton",
+ Trustedrouter = "Trustedrouter",
TypeSafe = "TypeSafe",
Nace = "Nace",
PARALLEL_AI = "Parallel AI",
@@ -325,6 +327,7 @@ export const provider_map: Record = {
TogetherAI: "together_ai",
TOPAZ: "topaz",
Triton: "triton",
+ Trustedrouter: "trustedrouter",
TypeSafe: "typesafe",
Nace: "nace",
PARALLEL_AI: "parallel_ai",
@@ -441,6 +444,7 @@ export const providerLogoMap: Partial> = {
[Providers.TogetherAI]: togetheraiLogo.src,
[Providers.TOPAZ]: topazLogo.src,
[Providers.Triton]: nvidiaTritonLogo.src,
+ [Providers.Trustedrouter]: trustedrouterLogo.src,
[Providers.TypeSafe]: typesafeLogo.src,
[Providers.V0]: v0Logo.src,
[Providers.VERCEL_AI_GATEWAY]: vercelLogo.src,