n8n-io/n8n · error · NotFoundError
Could not find a personal project for this user
Error message
Could not find a personal project for this user
What it means
The personal-project endpoint expects every user to have exactly one personal project. If projectsService.getPersonalProject(req.user) returns undefined, the endpoint responds 404 'Could not find a personal project for this user'.
Source
Thrown at packages/cli/src/controllers/project.controller.ts:200
results.push(result);
}
// Deduplicate and sort scopes
for (const result of results) {
if (result.scopes) {
result.scopes = [...new Set(result.scopes)].sort();
}
}
return results;
}
@Get('/personal')
async getPersonalProject(req: AuthenticatedRequest) {
const project = await this.projectsService.getPersonalProject(req.user);
if (!project) {
throw new NotFoundError('Could not find a personal project for this user');
}
const relation = await this.projectsService.getProjectRelationForUserAndProject(
req.user.id,
project.id,
);
const scopes: Scope[] = [
...combineScopes({
global: getAuthPrincipalScopes(req.user),
project: relation?.role.scopes.map((scope) => scope.slug) ?? [],
}),
];
return {
...project,
scopes,
// Personal projects have a single owner and are never subject to managed team roles.
rolesManaged: false,
};View on GitHub (pinned to 5ac6606e81)
Solutions
- Run the personal-project provisioning/migration so every existing user gets a personal project.
- Re-trigger project creation for the affected user (e.g. re-run owner setup / user sync).
- Confirm the user record is intact and not in a partially-deleted state in the DB.
Defensive patterns
Strategy: try-catch
Validate before calling
// No pure caller pre-check; ensure provisioning ran. Caller can verify a personal project exists via the same endpoint and handle 404 gracefully.
Try / catch
try {
await api.get('/projects/personal');
} catch (e) {
if (e.status === 404 && /Could not find a personal project/.test(e.message)) {
// trigger/re-run personal-project provisioning for the user, then retry
} else { throw e; }
} Prevention
- Run the personal-project migration/provisioning on upgrade.
- Confirm owner setup completes project creation for new users.
When it happens
Trigger: GET /personal for a user who has no personal project record (getPersonalProject returned undefined).
Common situations: User created before the personal-project provisioning feature (or before the migration that backfills personal projects ran); the user's personal project record was deleted; owner/instance setup did not complete project provisioning.
Related errors
- Down migration only possible when there are no projects. Ple
- Project roles are managed automatically and cannot be change
- Migration "PurgeInvalidWorkflowConnections1675940580449" is
- Could not determine personal project ID
- Column "${oldTableColumnOrName}" was not found in the "${tab
AI-assisted analysis of n8n-io/n8n@5ac6606e81 (2026-08-12).
Data as JSON: /api/errors/2ae828b29681661b.
Report an issue: GitHub.