diff --git a/server/private/routers/external.ts b/server/private/routers/external.ts
index 6dcf0e3be..cad76b80d 100644
--- a/server/private/routers/external.ts
+++ b/server/private/routers/external.ts
@@ -34,8 +34,6 @@ import * as eventStreamingDestination from "#private/routers/eventStreamingDesti
import * as alertRule from "#private/routers/alertRule";
import * as healthChecks from "#private/routers/healthChecks";
import * as policy from "#private/routers/policy";
-import * as resource from "#private/routers/resource";
-
import {
verifyOrgAccess,
verifyUserHasAction,
@@ -864,25 +862,3 @@ authenticated.post(
verifyOrgAccess,
logs.logAccessAuditAttempt
);
-
-authenticated.put(
- "/resource/:resourceId/mtls/certificate",
- verifyResourceAccess,
- verifyLimits,
- verifyUserHasAction(ActionsEnum.createResourceMtlsCertificate),
- logActionAudit(ActionsEnum.createResourceMtlsCertificate),
- resource.createResourceMtlsCertificate
-);
-authenticated.get(
- "/resource/:resourceId/mtls/certificates",
- verifyResourceAccess,
- verifyUserHasAction(ActionsEnum.listResourceMtlsCertificates),
- resource.listResourceMtlsCertificates
-);
-authenticated.delete(
- "/resource/:resourceId/mtls/certificate/:mtlsCertificateId",
- verifyResourceAccess,
- verifyUserHasAction(ActionsEnum.deleteResourceMtlsCertificate),
- logActionAudit(ActionsEnum.deleteResourceMtlsCertificate),
- resource.deleteResourceMtlsCertificate
-);
diff --git a/server/private/routers/integration.ts b/server/private/routers/integration.ts
index c4bbe4160..9d92d3481 100644
--- a/server/private/routers/integration.ts
+++ b/server/private/routers/integration.ts
@@ -467,36 +467,3 @@ authenticated.get(
verifyApiKeyHasAction(ActionsEnum.getTarget),
healthChecks.getHealthCheckStatusHistory
);
-
-authenticated.put(
- [
- "/resource/:resourceId/mtls/certificate",
- "/public-resource/:resourceId/mtls/certificate"
- ],
- verifyApiKeyResourceAccess,
- verifyLimits,
- verifyApiKeyHasAction(ActionsEnum.createResourceMtlsCertificate),
- logActionAudit(ActionsEnum.createResourceMtlsCertificate),
- resource.createResourceMtlsCertificate
-);
-
-authenticated.get(
- [
- "/resource/:resourceId/mtls/certificates",
- "/public-resource/:resourceId/mtls/certificates"
- ],
- verifyApiKeyResourceAccess,
- verifyApiKeyHasAction(ActionsEnum.listResourceMtlsCertificates),
- resource.listResourceMtlsCertificates
-);
-
-authenticated.delete(
- [
- "/resource/:resourceId/mtls/certificate/:mtlsCertificateId",
- "/public-resource/:resourceId/mtls/certificate/:mtlsCertificateId"
- ],
- verifyApiKeyResourceAccess,
- verifyApiKeyHasAction(ActionsEnum.deleteResourceMtlsCertificate),
- logActionAudit(ActionsEnum.deleteResourceMtlsCertificate),
- resource.deleteResourceMtlsCertificate
-);
diff --git a/server/private/routers/resource/index.ts b/server/private/routers/resource/index.ts
index 6cf21f900..ea9b87d65 100644
--- a/server/private/routers/resource/index.ts
+++ b/server/private/routers/resource/index.ts
@@ -12,6 +12,3 @@
*/
export * from "./getMaintenanceInfo";
-export * from "./deleteResourceMtlsCertificate";
-export * from "./createResourceMtlsCertificate";
-export * from "./listResourceMtlsCertificates";
diff --git a/server/routers/external.ts b/server/routers/external.ts
index 71691a336..7640e98da 100644
--- a/server/routers/external.ts
+++ b/server/routers/external.ts
@@ -1997,6 +1997,28 @@ authenticated.put(
reKey.reGenerateExitNodeSecret
);
+authenticated.put(
+ "/resource/:resourceId/mtls/certificate",
+ verifyResourceAccess,
+ verifyLimits,
+ verifyUserHasAction(ActionsEnum.createResourceMtlsCertificate),
+ logActionAudit(ActionsEnum.createResourceMtlsCertificate),
+ resource.createResourceMtlsCertificate
+);
+authenticated.get(
+ "/resource/:resourceId/mtls/certificates",
+ verifyResourceAccess,
+ verifyUserHasAction(ActionsEnum.listResourceMtlsCertificates),
+ resource.listResourceMtlsCertificates
+);
+authenticated.delete(
+ "/resource/:resourceId/mtls/certificate/:mtlsCertificateId",
+ verifyResourceAccess,
+ verifyUserHasAction(ActionsEnum.deleteResourceMtlsCertificate),
+ logActionAudit(ActionsEnum.deleteResourceMtlsCertificate),
+ resource.deleteResourceMtlsCertificate
+);
+
// Auth routes
export const authRouter = Router();
unauthenticated.use("/auth", authRouter);
diff --git a/server/routers/integration.ts b/server/routers/integration.ts
index dac082434..424bbd213 100644
--- a/server/routers/integration.ts
+++ b/server/routers/integration.ts
@@ -1963,3 +1963,36 @@ authenticated.put(
logActionAudit(ActionsEnum.detachLabelFromItem),
labels.detachLabelFromItem
);
+
+authenticated.put(
+ [
+ "/resource/:resourceId/mtls/certificate",
+ "/public-resource/:resourceId/mtls/certificate"
+ ],
+ verifyApiKeyResourceAccess,
+ verifyLimits,
+ verifyApiKeyHasAction(ActionsEnum.createResourceMtlsCertificate),
+ logActionAudit(ActionsEnum.createResourceMtlsCertificate),
+ resource.createResourceMtlsCertificate
+);
+
+authenticated.get(
+ [
+ "/resource/:resourceId/mtls/certificates",
+ "/public-resource/:resourceId/mtls/certificates"
+ ],
+ verifyApiKeyResourceAccess,
+ verifyApiKeyHasAction(ActionsEnum.listResourceMtlsCertificates),
+ resource.listResourceMtlsCertificates
+);
+
+authenticated.delete(
+ [
+ "/resource/:resourceId/mtls/certificate/:mtlsCertificateId",
+ "/public-resource/:resourceId/mtls/certificate/:mtlsCertificateId"
+ ],
+ verifyApiKeyResourceAccess,
+ verifyApiKeyHasAction(ActionsEnum.deleteResourceMtlsCertificate),
+ logActionAudit(ActionsEnum.deleteResourceMtlsCertificate),
+ resource.deleteResourceMtlsCertificate
+);
diff --git a/server/private/routers/resource/createResourceMtlsCertificate.ts b/server/routers/resource/createResourceMtlsCertificate.ts
similarity index 95%
rename from server/private/routers/resource/createResourceMtlsCertificate.ts
rename to server/routers/resource/createResourceMtlsCertificate.ts
index d42293441..5ad04b55d 100644
--- a/server/private/routers/resource/createResourceMtlsCertificate.ts
+++ b/server/routers/resource/createResourceMtlsCertificate.ts
@@ -1,16 +1,3 @@
-/*
- * This file is part of a proprietary work.
- *
- * Copyright (c) 2025-2026 Fossorial, Inc.
- * All rights reserved.
- *
- * This file is licensed under the Fossorial Commercial License.
- * You may not use this file except in compliance with the License.
- * Unauthorized use, copying, modification, or distribution is strictly prohibited.
- *
- * This file is not licensed under the AGPLv3.
- */
-
import { Request, Response, NextFunction } from "express";
import { z } from "zod";
import { db, resourceMtlsCertificates, resources } from "@server/db";
diff --git a/server/private/routers/resource/deleteResourceMtlsCertificate.ts b/server/routers/resource/deleteResourceMtlsCertificate.ts
similarity index 91%
rename from server/private/routers/resource/deleteResourceMtlsCertificate.ts
rename to server/routers/resource/deleteResourceMtlsCertificate.ts
index c74f0eb1f..f9ee3c2f6 100644
--- a/server/private/routers/resource/deleteResourceMtlsCertificate.ts
+++ b/server/routers/resource/deleteResourceMtlsCertificate.ts
@@ -1,16 +1,3 @@
-/*
- * This file is part of a proprietary work.
- *
- * Copyright (c) 2025-2026 Fossorial, Inc.
- * All rights reserved.
- *
- * This file is licensed under the Fossorial Commercial License.
- * You may not use this file except in compliance with the License.
- * Unauthorized use, copying, modification, or distribution is strictly prohibited.
- *
- * This file is not licensed under the AGPLv3.
- */
-
import { Request, Response, NextFunction } from "express";
import { z } from "zod";
import { db, resourceMtlsCertificates, resources } from "@server/db";
diff --git a/server/routers/resource/index.ts b/server/routers/resource/index.ts
index 7c888004c..c4004fe1b 100644
--- a/server/routers/resource/index.ts
+++ b/server/routers/resource/index.ts
@@ -45,3 +45,6 @@ export * from "./addAiProviderToResource";
export * from "./removeAiProviderFromResource";
export * from "./exportResourceBlueprint";
export * from "./types";
+export * from "./deleteResourceMtlsCertificate";
+export * from "./createResourceMtlsCertificate";
+export * from "./listResourceMtlsCertificates";
diff --git a/server/private/routers/resource/listResourceMtlsCertificates.ts b/server/routers/resource/listResourceMtlsCertificates.ts
similarity index 90%
rename from server/private/routers/resource/listResourceMtlsCertificates.ts
rename to server/routers/resource/listResourceMtlsCertificates.ts
index aa6ab8b24..142d225b7 100644
--- a/server/private/routers/resource/listResourceMtlsCertificates.ts
+++ b/server/routers/resource/listResourceMtlsCertificates.ts
@@ -1,16 +1,3 @@
-/*
- * This file is part of a proprietary work.
- *
- * Copyright (c) 2025-2026 Fossorial, Inc.
- * All rights reserved.
- *
- * This file is licensed under the Fossorial Commercial License.
- * You may not use this file except in compliance with the License.
- * Unauthorized use, copying, modification, or distribution is strictly prohibited.
- *
- * This file is not licensed under the AGPLv3.
- */
-
import { Request, Response, NextFunction } from "express";
import { z } from "zod";
import { db, resourceMtlsCertificates, resources } from "@server/db";
diff --git a/src/app/[orgId]/settings/resources/public/[niceId]/mtls/page.tsx b/src/app/[orgId]/settings/resources/public/[niceId]/mtls/page.tsx
index 7fd454d31..955eb041c 100644
--- a/src/app/[orgId]/settings/resources/public/[niceId]/mtls/page.tsx
+++ b/src/app/[orgId]/settings/resources/public/[niceId]/mtls/page.tsx
@@ -16,14 +16,11 @@ import {
import { SwitchInput } from "@app/components/SwitchInput";
import { Alert, AlertDescription, AlertTitle } from "@app/components/ui/alert";
import { Badge } from "@app/components/ui/badge";
-import { PaidFeaturesAlert } from "@app/components/PaidFeaturesAlert";
import { useEnvContext } from "@app/hooks/useEnvContext";
-import { usePaidStatus } from "@app/hooks/usePaidStatus";
import { useResourceContext } from "@app/hooks/useResourceContext";
import { toast } from "@app/hooks/useToast";
import { createApiClient, formatAxiosError } from "@app/lib/api";
import { resourceQueries } from "@app/lib/queries";
-import { tierMatrix } from "@server/lib/billing/tierMatrix";
import type {
CreateResourceMtlsCertificateResponse,
DeleteResourceMtlsCertificateResponse,
@@ -47,10 +44,9 @@ export default function ResourceMtlsPage() {
const t = useTranslations();
const api = createApiClient({ env });
const queryClient = useQueryClient();
- const { isPaidUser } = usePaidStatus();
const supportsMtls = resource.mode === "http";
- const isMtlsDisabled = !isPaidUser(tierMatrix.mtls);
+ const isMtlsDisabled = false;
useEffect(() => {
if (env.flags.disableEnterpriseFeatures || !supportsMtls) {
@@ -206,7 +202,6 @@ export default function ResourceMtlsPage() {
return (
<>
-