Mintplex-Labs/anything-llm · error
Workspace not found
Error message
Workspace not found
What it means
Handling of the 'workspace-content' command in server/endpoints/mobile/utils/index.js: it resolves the workspace by body.workspaceSlug via Workspace.getWithUser(user, { slug }) in multi-user mode (which also enforces the user's access) or Workspace.get({ slug }) otherwise. When nothing matches it returns 400 { error: 'Workspace not found' } (note: 400, not 404). The command returns the workspace's threads and chats.
Source
Thrown at server/endpoints/mobile/utils/index.js:54
include: true,
...(user ? { user_id: user.id } : {}),
},
}),
]);
workspace.threadCount = threadCount;
workspace.chatCount = chatCount;
workspace.platform = MobileDevice.platform;
}
return response.status(200).json({ workspaces });
}
if (command === "workspace-content") {
const workspace = user
? await Workspace.getWithUser(user, { slug: String(body.workspaceSlug) })
: await Workspace.get({ slug: String(body.workspaceSlug) });
if (!workspace)
return response.status(400).json({ error: "Workspace not found" });
const threads = [
{
id: 0,
name: "Default Thread",
slug: "default-thread",
workspace_id: workspace.id,
createdAt: new Date(),
lastUpdatedAt: new Date(),
},
...(await prisma.workspace_threads.findMany({
where: {
workspace_id: workspace.id,
...(user ? { user_id: user.id } : {}),
},
})),
];
const chats = (
await prisma.workspace_chats.findMany({View on GitHub (pinned to 3aec848f28)
Solutions
- Use the slug exactly as returned by the earlier 'workspaces' command for the same user
- Always include workspaceSlug in the body — its absence yields this same error
- If permissions may have changed, re-run the 'workspaces' command to see what is still visible
Example fix
// before
api.command({ command: 'workspace-content', slug });
// after
api.command({ command: 'workspace-content', workspaceSlug: slug }); Defensive patterns
Strategy: validation
Validate before calling
const res = await api.command({ command: 'workspaces' });
const slugs = new Set(res.workspaces.map((w) => w.slug));
if (!slugs.has(targetSlug)) throw new Error(`Unknown workspace slug: ${targetSlug}`); Type guard
/** @param {any} b */
function isWorkspaceCommand(b) {
return typeof b?.workspaceSlug === 'string' && b.workspaceSlug.length > 0;
} Prevention
- Always take slugs from the 'workspaces' command response, never hand-typed
- Include workspaceSlug in every workspace-scoped command body
- Refresh the workspace list when content fetches start failing
When it happens
Trigger: POSTing command 'workspace-content' with a slug that doesn't exist, is misspelled, or that the device's user can't access; or omitting workspaceSlug entirely — String(undefined) becomes 'undefined', which matches no slug, so a missing field masquerades as not-found.
Common situations: Slug copied from a URL with different casing/encoding; workspace deleted between the list call and the content call; user's workspace permissions changed; client forgets to include the field.
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
Related errors
AI-assisted analysis of Mintplex-Labs/anything-llm@3aec848f28 (2026-08-18).
Data as JSON: /api/errors/ecede2d20d7e5242.
Report an issue: GitHub.