Projects
GET /api/orgs/{org_id}/projects
Section titled “GET /api/orgs/{org_id}/projects”List Projects
List all projects in the organization, with resource counts by type.
Omit limit to get every project; total is the full count either
way. uncategorized_count is always the whole-org count, independent of
the page being viewed.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| limit | query | integer | no | Max rows to return (1-100). Omit to return every row. |
| offset | query | integer | no | Rows to skip — pass the previous response’s next_offset. |
| org_id | path | string (uuid) | yes |
Responses
| Status | Description | Body |
|---|---|---|
| 200 | Successful Response | ProjectListResponse |
| 422 | Validation Error | HTTPValidationError |
POST /api/orgs/{org_id}/projects
Section titled “POST /api/orgs/{org_id}/projects”Create Project
Create a new project. Requires admin/owner role.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| org_id | path | string (uuid) | yes |
Request body (required)
| Field | Type | Required | Description |
|---|---|---|---|
| color | string | no | |
| description | string | no | |
| icon | string | no | |
| name | string | yes | |
| slug | string | no |
Responses
| Status | Description | Body |
|---|---|---|
| 201 | Successful Response | ProjectResponse |
| 422 | Validation Error | HTTPValidationError |
GET /api/orgs/{org_id}/projects/{project_id}
Section titled “GET /api/orgs/{org_id}/projects/{project_id}”Get Project
Get a project’s detail, including resource counts by type.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| org_id | path | string (uuid) | yes | |
| project_id | path | string (uuid) | yes |
Responses
| Status | Description | Body |
|---|---|---|
| 200 | Successful Response | ProjectResponse |
| 422 | Validation Error | HTTPValidationError |
PATCH /api/orgs/{org_id}/projects/{project_id}
Section titled “PATCH /api/orgs/{org_id}/projects/{project_id}”Update Project
Update a project’s name/slug/description/color/icon. Requires admin/owner role.
Only fields present in the request body are applied; pass null to
clear description, color, or icon.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| org_id | path | string (uuid) | yes | |
| project_id | path | string (uuid) | yes |
Request body (required)
| Field | Type | Required | Description |
|---|---|---|---|
| color | string | no | |
| description | string | no | |
| icon | string | no | |
| name | string | no | |
| slug | string | no |
Responses
| Status | Description | Body |
|---|---|---|
| 200 | Successful Response | ProjectResponse |
| 422 | Validation Error | HTTPValidationError |
DELETE /api/orgs/{org_id}/projects/{project_id}
Section titled “DELETE /api/orgs/{org_id}/projects/{project_id}”Delete Project
Soft-delete a project. Requires admin/owner role.
Membership rows are hard-deleted; bundled resources are NOT deleted — they become uncategorized.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| org_id | path | string (uuid) | yes | |
| project_id | path | string (uuid) | yes |
Responses
| Status | Description | Body |
|---|---|---|
| 204 | Successful Response | |
| 422 | Validation Error | HTTPValidationError |
GET /api/orgs/{org_id}/projects/{project_id}/resources
Section titled “GET /api/orgs/{org_id}/projects/{project_id}/resources”List Project Resources
List a project’s member resources, resolved to display data.
Dangling rows (the referenced entity was deleted) are skipped gracefully.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| org_id | path | string (uuid) | yes | |
| project_id | path | string (uuid) | yes |
Responses
| Status | Description | Body |
|---|---|---|
| 200 | Successful Response | ProjectResourcesResponse |
| 422 | Validation Error | HTTPValidationError |
POST /api/orgs/{org_id}/projects/{project_id}/resources
Section titled “POST /api/orgs/{org_id}/projects/{project_id}/resources”Add Project Resources
Batch-add resources to a project. Requires admin/owner role.
A resource already in another project is moved (a resource belongs to at
most one project). Validates every entity exists in this org; 422 if any
don’t (this also rejects system skills, since org_id IS NULL skills
never match an org-scoped lookup).
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| org_id | path | string (uuid) | yes | |
| project_id | path | string (uuid) | yes |
Request body (required)
| Field | Type | Required | Description |
|---|---|---|---|
| resources | ResourceRef[] | no |
Responses
| Status | Description | Body |
|---|---|---|
| 200 | Successful Response | AddResourcesResponse |
| 422 | Validation Error | HTTPValidationError |
DELETE /api/orgs/{org_id}/projects/{project_id}/resources/{entity_type}/{entity_id}
Section titled “DELETE /api/orgs/{org_id}/projects/{project_id}/resources/{entity_type}/{entity_id}”Remove Project Resource
Remove one resource from a project. Requires admin/owner role.
The resource is NOT deleted — it becomes uncategorized.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| entity_id | path | string (uuid) | yes | |
| entity_type | path | ProjectResourceType | yes | |
| org_id | path | string (uuid) | yes | |
| project_id | path | string (uuid) | yes |
Responses
| Status | Description | Body |
|---|---|---|
| 204 | Successful Response | |
| 422 | Validation Error | HTTPValidationError |