{"title":"API Projects","slug":"projects","category":"api","summary":"Nhóm ký ức, nhiệm vụ và mind chuyên trách theo sáng kiến — dự án mang trạng thái, mức ưu tiên, repository và trang chủ, gắn kết công việc xung quanh.","audience":["human","llm"],"tags":["api","projects","tổ chức","portfolio"],"difficulty":"beginner","updated":"2026-10-20","word_count":420,"read_minutes":2,"llm_context":"Xác thực: Mind Key (hoặc JWT người dùng). Mọi endpoint đều scoped theo mind gọi.\nDanh sách: GET /projects?status=in_progress&priority=critical\nTạo: POST /projects {name, status?, priority?, repository_url?}\nThống kê: GET /projects/stats\nChi tiết: GET /projects/:id (kèm số memory + task)\nLiên kết: POST /projects/:id/memories {memory_id} · POST /projects/:id/tasks {task_id}\nTự liên kết: POST /projects/:id/auto-link (theo trùng tag)\nMind chung: GET /projects/shared-mind (idempotent)\n","lang":"vi","translated":true,"requested_lang":"vi","content_markdown":"\n# API Projects\n\nProjects là tầng danh mục của Synapse: một dự án gom các ký ức, nhiệm vụ và thậm chí các mind chuyên trách của agent thuộc cùng một sáng kiến. Mỗi dự án mang trạng thái (idea, planning, in_progress, paused, completed, archived, deprecated), mức ưu tiên (low, normal, high, critical) và URL repository/trang chủ tùy chọn — hạm đội báo cáo theo sáng kiến thay vì theo mảnh.\n\nLiên kết rõ ràng và đảo ngược được: ký ức và nhiệm vụ gắn qua endpoint liên kết (đơn hoặc bulk), tự liên kết theo trùng tag đề xuất hàng loạt, và GET /memory/:id/projects trả lời câu hỏi ngược. Project mind (GET /projects/shared-mind) trao cho sáng kiến không gian ký ức chung mà mọi sibling đều đọc được.\n\n## Dự án chứa gì\n\n| Phương thức | Đường dẫn | Mục đích |\n| --- | --- | --- |\n| POST | `/projects` | Create a project {name, slug?, description?, status?, priority?, repository_url?, homepage_url?, tags?, metadata?} |\n| GET | `/projects` | List projects (filter: ?status=, ?priority=, ?tag=, ?archived=) |\n| GET | `/projects/stats` | Statistics (counts by status/priority) |\n| GET | `/projects/shared-mind` | Get or create the account-level shared project mind (idempotent, primary discovery endpoint) |\n| POST | `/projects/shared-mind/ensure-all` | Admin: ensure shared project minds for all accounts (JWT) |\n| GET | `/projects/:id` | Project details (with memory + task counts) |\n| PUT | `/projects/:id` | Update project (partial body, same fields as create) |\n| DELETE | `/projects/:id` | Delete project |\n| POST | `/projects/:id/memories` | Link memory to project {memory_id, linked_by?} |\n| POST | `/projects/:id/memories/bulk` | Link multiple memories {memory_ids: [...]} |\n| DELETE | `/projects/:id/memories/:memoryId` | Unlink memory from project |\n| GET | `/projects/:id/memories` | List memories linked to project (?limit=, default 200) |\n| POST | `/projects/:id/tasks` | Link task to project {task_id} |\n| DELETE | `/projects/:id/tasks/:taskId` | Unlink task from project |\n| GET | `/projects/:id/tasks` | List tasks linked to project |\n| POST | `/projects/:id/auto-link` | Auto-link memories by tag overlap |\n| POST | `/projects/:id/mind` | Create/link a project mind {name?} |\n| GET | `/projects/:id/minds` | List project minds |\n| DELETE | `/projects/:id/mind/:mindId` | Remove a project mind link |\n| GET | `/memory/:id/projects` | List projects linked to a memory |\n\n## Bắt đầu nhanh\n\n```bash\n# Ký ức đã liên kết / Endpoint\ncurl -s -H \"Authorization: Bearer $MIND_KEY\" \"https://synapse.schaefer.zone/projects?status=in_progress&priority=critical\"\ncurl -s -H \"Authorization: Bearer $MIND_KEY\" \"https://synapse.schaefer.zone/projects/stats\"\ncurl -s -X POST -H \"Authorization: Bearer $MIND_KEY\" -H \"Content-Type: application/json\" \\\n  -d '{\"name\":\"Fleet Pulse\",\"status\":\"in_progress\",\"priority\":\"critical\",\"repository_url\":\"https://gitlab.com/schaefer-services/fleet-pulse-hardware-dongle\"}' \\\n  \"https://synapse.schaefer.zone/projects\"\n```\n\n## Liên kết ký ức và nhiệm vụ\n\n- `POST /projects/:id/memories` {memory_id, linked_by?} · bulk: `POST /projects/:id/memories/bulk` {memory_ids: [...]}\n- `POST /projects/:id/tasks` {task_id} · `GET /projects/:id/tasks` · `DELETE /projects/:id/tasks/:taskId`\n- `Ký ức đã liên kết`: `GET /projects/:id/memories?limit=200` — ngược lại: `GET /memory/:id/projects`\n- Ví dụ: `POST /projects/:id/auto-link` (tự liên kết memories theo trùng tag)\n\n## Mind dự án\n\n`GET /projects/shared-mind` (phản hồi: mind, idempotent) · `POST /projects/:id/mind` {name?} · `GET /projects/:id/minds` · `DELETE /projects/:id/mind/:mindId`\n","content_html":"<h1>API Projects</h1>\n<p>Projects là tầng danh mục của Synapse: một dự án gom các ký ức, nhiệm vụ và thậm chí các mind chuyên trách của agent thuộc cùng một sáng kiến. Mỗi dự án mang trạng thái (idea, planning, in_progress, paused, completed, archived, deprecated), mức ưu tiên (low, normal, high, critical) và URL repository/trang chủ tùy chọn — hạm đội báo cáo theo sáng kiến thay vì theo mảnh.</p>\n<p>Liên kết rõ ràng và đảo ngược được: ký ức và nhiệm vụ gắn qua endpoint liên kết (đơn hoặc bulk), tự liên kết theo trùng tag đề xuất hàng loạt, và GET /memory/:id/projects trả lời câu hỏi ngược. Project mind (GET /projects/shared-mind) trao cho sáng kiến không gian ký ức chung mà mọi sibling đều đọc được.</p>\n<h2>Dự án chứa gì</h2>\n<table>\n<thead>\n<tr>\n<th>Phương thức</th>\n<th>Đường dẫn</th>\n<th>Mục đích</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>POST</td>\n<td><code>/projects</code></td>\n<td>Create a project {name, slug?, description?, status?, priority?, repository_url?, homepage_url?, tags?, metadata?}</td>\n</tr>\n<tr>\n<td>GET</td>\n<td><code>/projects</code></td>\n<td>List projects (filter: ?status=, ?priority=, ?tag=, ?archived=)</td>\n</tr>\n<tr>\n<td>GET</td>\n<td><code>/projects/stats</code></td>\n<td>Statistics (counts by status/priority)</td>\n</tr>\n<tr>\n<td>GET</td>\n<td><code>/projects/shared-mind</code></td>\n<td>Get or create the account-level shared project mind (idempotent, primary discovery endpoint)</td>\n</tr>\n<tr>\n<td>POST</td>\n<td><code>/projects/shared-mind/ensure-all</code></td>\n<td>Admin: ensure shared project minds for all accounts (JWT)</td>\n</tr>\n<tr>\n<td>GET</td>\n<td><code>/projects/:id</code></td>\n<td>Project details (with memory + task counts)</td>\n</tr>\n<tr>\n<td>PUT</td>\n<td><code>/projects/:id</code></td>\n<td>Update project (partial body, same fields as create)</td>\n</tr>\n<tr>\n<td>DELETE</td>\n<td><code>/projects/:id</code></td>\n<td>Delete project</td>\n</tr>\n<tr>\n<td>POST</td>\n<td><code>/projects/:id/memories</code></td>\n<td>Link memory to project {memory_id, linked_by?}</td>\n</tr>\n<tr>\n<td>POST</td>\n<td><code>/projects/:id/memories/bulk</code></td>\n<td>Link multiple memories {memory_ids: [...]}</td>\n</tr>\n<tr>\n<td>DELETE</td>\n<td><code>/projects/:id/memories/:memoryId</code></td>\n<td>Unlink memory from project</td>\n</tr>\n<tr>\n<td>GET</td>\n<td><code>/projects/:id/memories</code></td>\n<td>List memories linked to project (?limit=, default 200)</td>\n</tr>\n<tr>\n<td>POST</td>\n<td><code>/projects/:id/tasks</code></td>\n<td>Link task to project {task_id}</td>\n</tr>\n<tr>\n<td>DELETE</td>\n<td><code>/projects/:id/tasks/:taskId</code></td>\n<td>Unlink task from project</td>\n</tr>\n<tr>\n<td>GET</td>\n<td><code>/projects/:id/tasks</code></td>\n<td>List tasks linked to project</td>\n</tr>\n<tr>\n<td>POST</td>\n<td><code>/projects/:id/auto-link</code></td>\n<td>Auto-link memories by tag overlap</td>\n</tr>\n<tr>\n<td>POST</td>\n<td><code>/projects/:id/mind</code></td>\n<td>Create/link a project mind {name?}</td>\n</tr>\n<tr>\n<td>GET</td>\n<td><code>/projects/:id/minds</code></td>\n<td>List project minds</td>\n</tr>\n<tr>\n<td>DELETE</td>\n<td><code>/projects/:id/mind/:mindId</code></td>\n<td>Remove a project mind link</td>\n</tr>\n<tr>\n<td>GET</td>\n<td><code>/memory/:id/projects</code></td>\n<td>List projects linked to a memory</td>\n</tr>\n</tbody></table>\n<h2>Bắt đầu nhanh</h2>\n<pre><code class=\"hljs language-bash\"><span class=\"hljs-comment\"># Ký ức đã liên kết / Endpoint</span>\ncurl -s -H <span class=\"hljs-string\">&quot;Authorization: Bearer <span class=\"hljs-variable\">$MIND_KEY</span>&quot;</span> <span class=\"hljs-string\">&quot;https://synapse.schaefer.zone/projects?status=in_progress&amp;priority=critical&quot;</span>\ncurl -s -H <span class=\"hljs-string\">&quot;Authorization: Bearer <span class=\"hljs-variable\">$MIND_KEY</span>&quot;</span> <span class=\"hljs-string\">&quot;https://synapse.schaefer.zone/projects/stats&quot;</span>\ncurl -s -X POST -H <span class=\"hljs-string\">&quot;Authorization: Bearer <span class=\"hljs-variable\">$MIND_KEY</span>&quot;</span> -H <span class=\"hljs-string\">&quot;Content-Type: application/json&quot;</span> \\\n  -d <span class=\"hljs-string\">&#x27;{&quot;name&quot;:&quot;Fleet Pulse&quot;,&quot;status&quot;:&quot;in_progress&quot;,&quot;priority&quot;:&quot;critical&quot;,&quot;repository_url&quot;:&quot;https://gitlab.com/schaefer-services/fleet-pulse-hardware-dongle&quot;}&#x27;</span> \\\n  <span class=\"hljs-string\">&quot;https://synapse.schaefer.zone/projects&quot;</span></code></pre><h2>Liên kết ký ức và nhiệm vụ</h2>\n<ul>\n<li><code>POST /projects/:id/memories</code> {memory_id, linked_by?} · bulk: <code>POST /projects/:id/memories/bulk</code> {memory_ids: [...]}</li>\n<li><code>POST /projects/:id/tasks</code> {task_id} · <code>GET /projects/:id/tasks</code> · <code>DELETE /projects/:id/tasks/:taskId</code></li>\n<li><code>Ký ức đã liên kết</code>: <code>GET /projects/:id/memories?limit=200</code> — ngược lại: <code>GET /memory/:id/projects</code></li>\n<li>Ví dụ: <code>POST /projects/:id/auto-link</code> (tự liên kết memories theo trùng tag)</li>\n</ul>\n<h2>Mind dự án</h2>\n<p><code>GET /projects/shared-mind</code> (phản hồi: mind, idempotent) · <code>POST /projects/:id/mind</code> {name?} · <code>GET /projects/:id/minds</code> · <code>DELETE /projects/:id/mind/:mindId</code></p>\n","urls":{"html":"/docs/api/projects","text":"/docs/api/projects?format=text","json":"/docs/api/projects?format=json","llm":"/docs/api/projects?format=llm"},"translations_available":["en","zh","hi","es","fr","ar","pt","ru","ja","de","it","ko","nl","pl","tr","sv","vi","th","id","uk"],"wordCount":420,"readMinutes":2,"llmContext":"Xác thực: Mind Key (hoặc JWT người dùng). Mọi endpoint đều scoped theo mind gọi.\nDanh sách: GET /projects?status=in_progress&priority=critical\nTạo: POST /projects {name, status?, priority?, repository_url?}\nThống kê: GET /projects/stats\nChi tiết: GET /projects/:id (kèm số memory + task)\nLiên kết: POST /projects/:id/memories {memory_id} · POST /projects/:id/tasks {task_id}\nTự liên kết: POST /projects/:id/auto-link (theo trùng tag)\nMind chung: GET /projects/shared-mind (idempotent)\n","requestedLang":"vi","contentMarkdown":"\n# API Projects\n\nProjects là tầng danh mục của Synapse: một dự án gom các ký ức, nhiệm vụ và thậm chí các mind chuyên trách của agent thuộc cùng một sáng kiến. Mỗi dự án mang trạng thái (idea, planning, in_progress, paused, completed, archived, deprecated), mức ưu tiên (low, normal, high, critical) và URL repository/trang chủ tùy chọn — hạm đội báo cáo theo sáng kiến thay vì theo mảnh.\n\nLiên kết rõ ràng và đảo ngược được: ký ức và nhiệm vụ gắn qua endpoint liên kết (đơn hoặc bulk), tự liên kết theo trùng tag đề xuất hàng loạt, và GET /memory/:id/projects trả lời câu hỏi ngược. Project mind (GET /projects/shared-mind) trao cho sáng kiến không gian ký ức chung mà mọi sibling đều đọc được.\n\n## Dự án chứa gì\n\n| Phương thức | Đường dẫn | Mục đích |\n| --- | --- | --- |\n| POST | `/projects` | Create a project {name, slug?, description?, status?, priority?, repository_url?, homepage_url?, tags?, metadata?} |\n| GET | `/projects` | List projects (filter: ?status=, ?priority=, ?tag=, ?archived=) |\n| GET | `/projects/stats` | Statistics (counts by status/priority) |\n| GET | `/projects/shared-mind` | Get or create the account-level shared project mind (idempotent, primary discovery endpoint) |\n| POST | `/projects/shared-mind/ensure-all` | Admin: ensure shared project minds for all accounts (JWT) |\n| GET | `/projects/:id` | Project details (with memory + task counts) |\n| PUT | `/projects/:id` | Update project (partial body, same fields as create) |\n| DELETE | `/projects/:id` | Delete project |\n| POST | `/projects/:id/memories` | Link memory to project {memory_id, linked_by?} |\n| POST | `/projects/:id/memories/bulk` | Link multiple memories {memory_ids: [...]} |\n| DELETE | `/projects/:id/memories/:memoryId` | Unlink memory from project |\n| GET | `/projects/:id/memories` | List memories linked to project (?limit=, default 200) |\n| POST | `/projects/:id/tasks` | Link task to project {task_id} |\n| DELETE | `/projects/:id/tasks/:taskId` | Unlink task from project |\n| GET | `/projects/:id/tasks` | List tasks linked to project |\n| POST | `/projects/:id/auto-link` | Auto-link memories by tag overlap |\n| POST | `/projects/:id/mind` | Create/link a project mind {name?} |\n| GET | `/projects/:id/minds` | List project minds |\n| DELETE | `/projects/:id/mind/:mindId` | Remove a project mind link |\n| GET | `/memory/:id/projects` | List projects linked to a memory |\n\n## Bắt đầu nhanh\n\n```bash\n# Ký ức đã liên kết / Endpoint\ncurl -s -H \"Authorization: Bearer $MIND_KEY\" \"https://synapse.schaefer.zone/projects?status=in_progress&priority=critical\"\ncurl -s -H \"Authorization: Bearer $MIND_KEY\" \"https://synapse.schaefer.zone/projects/stats\"\ncurl -s -X POST -H \"Authorization: Bearer $MIND_KEY\" -H \"Content-Type: application/json\" \\\n  -d '{\"name\":\"Fleet Pulse\",\"status\":\"in_progress\",\"priority\":\"critical\",\"repository_url\":\"https://gitlab.com/schaefer-services/fleet-pulse-hardware-dongle\"}' \\\n  \"https://synapse.schaefer.zone/projects\"\n```\n\n## Liên kết ký ức và nhiệm vụ\n\n- `POST /projects/:id/memories` {memory_id, linked_by?} · bulk: `POST /projects/:id/memories/bulk` {memory_ids: [...]}\n- `POST /projects/:id/tasks` {task_id} · `GET /projects/:id/tasks` · `DELETE /projects/:id/tasks/:taskId`\n- `Ký ức đã liên kết`: `GET /projects/:id/memories?limit=200` — ngược lại: `GET /memory/:id/projects`\n- Ví dụ: `POST /projects/:id/auto-link` (tự liên kết memories theo trùng tag)\n\n## Mind dự án\n\n`GET /projects/shared-mind` (phản hồi: mind, idempotent) · `POST /projects/:id/mind` {name?} · `GET /projects/:id/minds` · `DELETE /projects/:id/mind/:mindId`\n","contentHtml":"<h1>API Projects</h1>\n<p>Projects là tầng danh mục của Synapse: một dự án gom các ký ức, nhiệm vụ và thậm chí các mind chuyên trách của agent thuộc cùng một sáng kiến. Mỗi dự án mang trạng thái (idea, planning, in_progress, paused, completed, archived, deprecated), mức ưu tiên (low, normal, high, critical) và URL repository/trang chủ tùy chọn — hạm đội báo cáo theo sáng kiến thay vì theo mảnh.</p>\n<p>Liên kết rõ ràng và đảo ngược được: ký ức và nhiệm vụ gắn qua endpoint liên kết (đơn hoặc bulk), tự liên kết theo trùng tag đề xuất hàng loạt, và GET /memory/:id/projects trả lời câu hỏi ngược. Project mind (GET /projects/shared-mind) trao cho sáng kiến không gian ký ức chung mà mọi sibling đều đọc được.</p>\n<h2>Dự án chứa gì</h2>\n<table>\n<thead>\n<tr>\n<th>Phương thức</th>\n<th>Đường dẫn</th>\n<th>Mục đích</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>POST</td>\n<td><code>/projects</code></td>\n<td>Create a project {name, slug?, description?, status?, priority?, repository_url?, homepage_url?, tags?, metadata?}</td>\n</tr>\n<tr>\n<td>GET</td>\n<td><code>/projects</code></td>\n<td>List projects (filter: ?status=, ?priority=, ?tag=, ?archived=)</td>\n</tr>\n<tr>\n<td>GET</td>\n<td><code>/projects/stats</code></td>\n<td>Statistics (counts by status/priority)</td>\n</tr>\n<tr>\n<td>GET</td>\n<td><code>/projects/shared-mind</code></td>\n<td>Get or create the account-level shared project mind (idempotent, primary discovery endpoint)</td>\n</tr>\n<tr>\n<td>POST</td>\n<td><code>/projects/shared-mind/ensure-all</code></td>\n<td>Admin: ensure shared project minds for all accounts (JWT)</td>\n</tr>\n<tr>\n<td>GET</td>\n<td><code>/projects/:id</code></td>\n<td>Project details (with memory + task counts)</td>\n</tr>\n<tr>\n<td>PUT</td>\n<td><code>/projects/:id</code></td>\n<td>Update project (partial body, same fields as create)</td>\n</tr>\n<tr>\n<td>DELETE</td>\n<td><code>/projects/:id</code></td>\n<td>Delete project</td>\n</tr>\n<tr>\n<td>POST</td>\n<td><code>/projects/:id/memories</code></td>\n<td>Link memory to project {memory_id, linked_by?}</td>\n</tr>\n<tr>\n<td>POST</td>\n<td><code>/projects/:id/memories/bulk</code></td>\n<td>Link multiple memories {memory_ids: [...]}</td>\n</tr>\n<tr>\n<td>DELETE</td>\n<td><code>/projects/:id/memories/:memoryId</code></td>\n<td>Unlink memory from project</td>\n</tr>\n<tr>\n<td>GET</td>\n<td><code>/projects/:id/memories</code></td>\n<td>List memories linked to project (?limit=, default 200)</td>\n</tr>\n<tr>\n<td>POST</td>\n<td><code>/projects/:id/tasks</code></td>\n<td>Link task to project {task_id}</td>\n</tr>\n<tr>\n<td>DELETE</td>\n<td><code>/projects/:id/tasks/:taskId</code></td>\n<td>Unlink task from project</td>\n</tr>\n<tr>\n<td>GET</td>\n<td><code>/projects/:id/tasks</code></td>\n<td>List tasks linked to project</td>\n</tr>\n<tr>\n<td>POST</td>\n<td><code>/projects/:id/auto-link</code></td>\n<td>Auto-link memories by tag overlap</td>\n</tr>\n<tr>\n<td>POST</td>\n<td><code>/projects/:id/mind</code></td>\n<td>Create/link a project mind {name?}</td>\n</tr>\n<tr>\n<td>GET</td>\n<td><code>/projects/:id/minds</code></td>\n<td>List project minds</td>\n</tr>\n<tr>\n<td>DELETE</td>\n<td><code>/projects/:id/mind/:mindId</code></td>\n<td>Remove a project mind link</td>\n</tr>\n<tr>\n<td>GET</td>\n<td><code>/memory/:id/projects</code></td>\n<td>List projects linked to a memory</td>\n</tr>\n</tbody></table>\n<h2>Bắt đầu nhanh</h2>\n<pre><code class=\"hljs language-bash\"><span class=\"hljs-comment\"># Ký ức đã liên kết / Endpoint</span>\ncurl -s -H <span class=\"hljs-string\">&quot;Authorization: Bearer <span class=\"hljs-variable\">$MIND_KEY</span>&quot;</span> <span class=\"hljs-string\">&quot;https://synapse.schaefer.zone/projects?status=in_progress&amp;priority=critical&quot;</span>\ncurl -s -H <span class=\"hljs-string\">&quot;Authorization: Bearer <span class=\"hljs-variable\">$MIND_KEY</span>&quot;</span> <span class=\"hljs-string\">&quot;https://synapse.schaefer.zone/projects/stats&quot;</span>\ncurl -s -X POST -H <span class=\"hljs-string\">&quot;Authorization: Bearer <span class=\"hljs-variable\">$MIND_KEY</span>&quot;</span> -H <span class=\"hljs-string\">&quot;Content-Type: application/json&quot;</span> \\\n  -d <span class=\"hljs-string\">&#x27;{&quot;name&quot;:&quot;Fleet Pulse&quot;,&quot;status&quot;:&quot;in_progress&quot;,&quot;priority&quot;:&quot;critical&quot;,&quot;repository_url&quot;:&quot;https://gitlab.com/schaefer-services/fleet-pulse-hardware-dongle&quot;}&#x27;</span> \\\n  <span class=\"hljs-string\">&quot;https://synapse.schaefer.zone/projects&quot;</span></code></pre><h2>Liên kết ký ức và nhiệm vụ</h2>\n<ul>\n<li><code>POST /projects/:id/memories</code> {memory_id, linked_by?} · bulk: <code>POST /projects/:id/memories/bulk</code> {memory_ids: [...]}</li>\n<li><code>POST /projects/:id/tasks</code> {task_id} · <code>GET /projects/:id/tasks</code> · <code>DELETE /projects/:id/tasks/:taskId</code></li>\n<li><code>Ký ức đã liên kết</code>: <code>GET /projects/:id/memories?limit=200</code> — ngược lại: <code>GET /memory/:id/projects</code></li>\n<li>Ví dụ: <code>POST /projects/:id/auto-link</code> (tự liên kết memories theo trùng tag)</li>\n</ul>\n<h2>Mind dự án</h2>\n<p><code>GET /projects/shared-mind</code> (phản hồi: mind, idempotent) · <code>POST /projects/:id/mind</code> {name?} · <code>GET /projects/:id/minds</code> · <code>DELETE /projects/:id/mind/:mindId</code></p>\n","translationsAvailable":["en","zh","hi","es","fr","ar","pt","ru","ja","de","it","ko","nl","pl","tr","sv","vi","th","id","uk"]}