diff --git a/apps/sim/app/api/organizations/[id]/search/history/route.ts b/apps/sim/app/api/organizations/[id]/search/history/route.ts
new file mode 100644
index 00000000000..507f2e08fd3
--- /dev/null
+++ b/apps/sim/app/api/organizations/[id]/search/history/route.ts
@@ -0,0 +1,49 @@
+import {
+ clearSearchHistoryContract,
+ listSearchHistoryContract,
+ recordSearchHistoryContract,
+} from '@/lib/api/contracts/knowledge/search-history'
+import {
+ defineInternalJsonRoute,
+ internalOrchestrationErrorPolicy,
+ internalRateLimits,
+ internalSessionAuth,
+} from '@/lib/api/server/routes'
+import {
+ clearSearchHistory,
+ listSearchHistory,
+ recordSearchHistory,
+ searchHistoryOperations,
+} from '@/lib/knowledge/application/search-history'
+
+export const GET = defineInternalJsonRoute({
+ contract: listSearchHistoryContract,
+ auth: internalSessionAuth,
+ operation: searchHistoryOperations.list,
+ rateLimit: internalRateLimits.user({ bucketName: 'search-history-read' }),
+ errorPolicy: internalOrchestrationErrorPolicy,
+ mapInput: ({ params }) => ({ organizationId: params.id }),
+ useCase: listSearchHistory,
+ staticResponseHeaders: { 'Cache-Control': 'private, no-store' },
+})
+export const POST = defineInternalJsonRoute({
+ contract: recordSearchHistoryContract,
+ auth: internalSessionAuth,
+ operation: searchHistoryOperations.record,
+ rateLimit: internalRateLimits.user({ bucketName: 'search-history-write' }),
+ errorPolicy: internalOrchestrationErrorPolicy,
+ parseOptions: { maxBodyBytes: 24 * 1024 },
+ mapInput: ({ params, body }) => ({ organizationId: params.id, event: body }),
+ useCase: recordSearchHistory,
+ staticResponseHeaders: { 'Cache-Control': 'private, no-store' },
+})
+export const DELETE = defineInternalJsonRoute({
+ contract: clearSearchHistoryContract,
+ auth: internalSessionAuth,
+ operation: searchHistoryOperations.clear,
+ rateLimit: internalRateLimits.user({ bucketName: 'search-history-write' }),
+ errorPolicy: internalOrchestrationErrorPolicy,
+ mapInput: ({ params }) => ({ organizationId: params.id }),
+ useCase: clearSearchHistory,
+ staticResponseHeaders: { 'Cache-Control': 'private, no-store' },
+})
diff --git a/apps/sim/app/o/[organizationId]/components/organization-sidebar/components/organization-header/organization-header.tsx b/apps/sim/app/o/[organizationId]/components/organization-sidebar/components/organization-header/organization-header.tsx
index 3075628dbc7..a5790cd9e35 100644
--- a/apps/sim/app/o/[organizationId]/components/organization-sidebar/components/organization-header/organization-header.tsx
+++ b/apps/sim/app/o/[organizationId]/components/organization-sidebar/components/organization-header/organization-header.tsx
@@ -145,9 +145,7 @@ export function OrganizationHeader({
{logo}
-
+ Sources you open will appear here. +
+ )} ++ Your recent searches will appear here. +
+ )} +