-
Notifications
You must be signed in to change notification settings - Fork 3.8k
Open
Description
Current behavior
I’m seeing a reproducible API behavior gap in self-hosted Plane regarding work-item search/list endpoints used by API clients/MCP tools.
POST /api/v1/workspaces/goodkind-io/work-items/advanced-search/returns403 Forbiddenwith{"detail":"You do not have permission to perform this action."}.GET /api/v1/workspaces/goodkind-io/work-items/search/?q=mwanreturns200with an empty result set.GET /api/v1/workspaces/goodkind-io/work-items/search/?search=mwanreturns matching issues as expected.
I verified URL resolution and route mapping behavior in the backend and observed that
/api/v1/workspaces/goodkind-io/work-items/advanced-search/ resolves to WorkspaceIssueAPIEndpoint with project_identifier='advanced' and issue_identifier='search', which appears to be a work-item-by-identifier route rather than the expected advanced search/list endpoint.
This causes clients that rely on filtered list paths to fail while unfiltered list calls still work.
- I have searched the existing issues
Steps to reproduce
- Use a valid API token against a self-hosted Plane workspace (
goodkind-ioin my reproduction). - Confirm authenticated API access works.
- Call:
POST /api/v1/workspaces/goodkind-io/work-items/advanced-search/with a valid request context.
- Observe
403 Forbiddenanddetail: You do not have permission to perform this action. - Call:
GET /api/v1/workspaces/goodkind-io/work-items/search/?q=mwan
- Observe
200with empty list response. - Call:
GET /api/v1/workspaces/goodkind-io/work-items/search/?search=mwan
- Observe non-empty results.
Expected behavior
- The advanced-search path should route to a work-item search/list endpoint and return expected filtered results for API clients.
- Search APIs should return consistent behavior and documented query handling for query terms.
- Authenticated users with expected workspace/project access should not receive permission denied for the advanced search endpoint.
Environment
- Environment: Production
- Browser: N/a
- Variant: Self-hosted
- Version: 1.2.3
Additional context
- This is observed while using the upstream Plane API paths and an MCP client.
get_me-style checks and unfiltered work-item list calls succeed; filtered behavior is where this fails.- Sanitized evidence can be attached in follow-up if useful.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels