diff --git a/surfsense_backend/app/services/provider_registry.py b/surfsense_backend/app/services/provider_registry.py
index 5095a96c2f..8d7ebbd98e 100644
--- a/surfsense_backend/app/services/provider_registry.py
+++ b/surfsense_backend/app/services/provider_registry.py
@@ -89,6 +89,15 @@ class ProviderSpec:
"bearer",
"Requesty",
),
+ "orcarouter": ProviderSpec(
+ Transport.OPENAI_COMPATIBLE,
+ "openai",
+ "openai_models",
+ "https://api.orcarouter.ai/v1",
+ False,
+ "bearer",
+ "OrcaRouter",
+ ),
"openai_compatible": ProviderSpec(
Transport.OPENAI_COMPATIBLE,
"openai",
diff --git a/surfsense_web/components/icons/providers/index.ts b/surfsense_web/components/icons/providers/index.ts
index f03fbec689..0200824c73 100644
--- a/surfsense_web/components/icons/providers/index.ts
+++ b/surfsense_web/components/icons/providers/index.ts
@@ -28,6 +28,7 @@ export { default as QwenIcon } from "./qwen.svg";
export { default as RecraftIcon } from "./recraft.svg";
export { default as ReplicateIcon } from "./replicate.svg";
export { default as RequestyIcon } from "./requesty.svg";
+export { default as OrcaRouterIcon } from "./orcarouter.svg";
export { default as SambaNovaIcon } from "./sambanova.svg";
export { default as TogetherAiIcon } from "./togetherai.svg";
export { default as VertexAiIcon } from "./vertexai.svg";
diff --git a/surfsense_web/components/icons/providers/orcarouter.svg b/surfsense_web/components/icons/providers/orcarouter.svg
new file mode 100644
index 0000000000..1d50de8975
--- /dev/null
+++ b/surfsense_web/components/icons/providers/orcarouter.svg
@@ -0,0 +1 @@
+
diff --git a/surfsense_web/components/settings/model-connections/default-connect-form.tsx b/surfsense_web/components/settings/model-connections/default-connect-form.tsx
index 7b33c0ae83..df22ec2e62 100644
--- a/surfsense_web/components/settings/model-connections/default-connect-form.tsx
+++ b/surfsense_web/components/settings/model-connections/default-connect-form.tsx
@@ -15,7 +15,8 @@ function baseUrlHint(provider: string) {
provider === "openai" ||
provider === "anthropic" ||
provider === "openrouter" ||
- provider === "requesty"
+ provider === "requesty" ||
+ provider === "orcarouter"
) {
return "Override only if you route through a proxy or gateway.";
}
diff --git a/surfsense_web/components/settings/model-connections/provider-metadata.tsx b/surfsense_web/components/settings/model-connections/provider-metadata.tsx
index f34d18120a..ad57cac6e3 100644
--- a/surfsense_web/components/settings/model-connections/provider-metadata.tsx
+++ b/surfsense_web/components/settings/model-connections/provider-metadata.tsx
@@ -8,6 +8,7 @@ export const PROVIDER_ORDER = [
"azure",
"openrouter",
"requesty",
+ "orcarouter",
"ollama_chat",
"lm_studio",
"openai_compatible",
@@ -56,6 +57,12 @@ export const PROVIDER_DISPLAY: Record<
iconKey: "requesty",
defaultBaseUrl: "https://router.requesty.ai/v1",
},
+ orcarouter: {
+ name: "OrcaRouter",
+ subtitle: "OrcaRouter",
+ iconKey: "orcarouter",
+ defaultBaseUrl: "https://api.orcarouter.ai/v1",
+ },
vertex_ai: { name: "Gemini", subtitle: "Google Cloud Vertex AI", iconKey: "vertex_ai" },
};
diff --git a/surfsense_web/lib/provider-icons.tsx b/surfsense_web/lib/provider-icons.tsx
index 20016fdf29..8b3488efd1 100644
--- a/surfsense_web/lib/provider-icons.tsx
+++ b/surfsense_web/lib/provider-icons.tsx
@@ -25,6 +25,7 @@ import {
OllamaIcon,
OpenaiIcon,
OpenRouterIcon,
+ OrcaRouterIcon,
PerplexityIcon,
QwenIcon,
RecraftIcon,
@@ -112,6 +113,8 @@ export function getProviderIcon(
return ;
case "OPENROUTER":
return ;
+ case "ORCAROUTER":
+ return ;
case "PERPLEXITY":
return ;
case "RECRAFT":