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.
The three shared_* fields form the project’s shared context. Both lists
are resolved against the org before they are stored — an unknown tool scope
or skill slug is a 422.
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 | |
| shared_allowed_tools | string[] | no | |
| shared_instruction | string | no | |
| shared_mounted_skills | string[] | no | |
| 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 fields, including its shared context. Requires admin/owner role.
Only fields present in the request body are applied; pass null to clear
description, color, icon, or shared_instruction. The two
shared lists REPLACE the stored list — send [] to clear them, omit them
to leave them alone. Both are resolved against the org before storing
(422 on an unknown tool scope or skill slug).
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 | |
| shared_allowed_tools | string[] | no | |
| shared_instruction | string | no | |
| shared_mounted_skills | 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}/memories
Section titled “GET /api/orgs/{org_id}/projects/{project_id}/memories”List Project Memories
List memories owned by this project, most recent first. Requires org membership.
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 | ProjectMemoryListResponse |
| 422 | Validation Error | HTTPValidationError |
POST /api/orgs/{org_id}/projects/{project_id}/memories
Section titled “POST /api/orgs/{org_id}/projects/{project_id}/memories”Create Project Memory
Create a memory owned by this project. Requires admin/owner role.
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 |
|---|---|---|---|
| content | string | yes |
Responses
| Status | Description | Body |
|---|---|---|
| 201 | Successful Response | AgentMemoryResponse |
| 422 | Validation Error | HTTPValidationError |
DELETE /api/orgs/{org_id}/projects/{project_id}/memories/{memory_id}
Section titled “DELETE /api/orgs/{org_id}/projects/{project_id}/memories/{memory_id}”Delete Project Memory
Delete a project memory. Requires admin/owner role.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| memory_id | path | string (uuid) | yes | |
| 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 |
PUT /api/orgs/{org_id}/projects/reorder
Section titled “PUT /api/orgs/{org_id}/projects/reorder”Reorder Projects
Reorder projects by setting display_order. Requires membership.
Ordering is a per-org display preference, not a configuration change, so
this needs membership rather than admin/owner — same as PUT /agent-teams/reorder. Ids that are not live projects of this org are
skipped; the rest still reorder.
Registered ahead of /{project_id} so the literal segment is matched
first even if a verb is later added to that path.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| org_id | path | string (uuid) | yes |
Request body (required)
| Field | Type | Required | Description |
|---|---|---|---|
| project_ids | string (uuid)[] | yes |
Responses
| Status | Description | Body |
|---|---|---|
| 204 | Successful Response | |
| 422 | Validation Error | HTTPValidationError |