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

  1. Run the personal-project provisioning/migration so every existing user gets a personal project.
  2. Re-trigger project creation for the affected user (e.g. re-run owner setup / user sync).
  3. 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

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


AI-assisted analysis of n8n-io/n8n@5ac6606e81 (2026-08-12). Data as JSON: /api/errors/2ae828b29681661b. Report an issue: GitHub.