{"title":"API 常见问题","slug":"api-faq","category":"faq","summary":"常见 API 问题 — 认证、限速、错误处理、端点发现。","audience":["human","llm"],"tags":["faq","api","troubleshooting"],"difficulty":"beginner","updated":"2026-06-27","word_count":205,"read_minutes":1,"lang":"zh","translated":true,"requested_lang":"zh","content_markdown":"\n# API 常见问题\n\n关于 Synapse API 的常见问题。\n\n## 如何认证？\n\n两种方式：\n\n1. **Mind Key**（用于数据端点）：`Authorization: Bearer mk_...`\n2. **JWT**（用于账户端点）：`Authorization: Bearer eyJ...`\n\n或通过查询参数（限速 60 次/分钟）：`?key=mk_...`\n\n参见 [Authentication](/docs/getting-started/authentication)。\n\n## Mind Key 和 JWT 有何区别？\n\n- **Mind Key**：租户范围，永不过期，用于记忆/聊天/任务数据\n- **JWT**：用户范围，7 天过期，用于账户/Mind 管理\n\n参见 [Mind Key 与 JWT](/docs/getting-started/mind-key-vs-jwt)。\n\n## 为什么收到 401 Unauthorized？\n\n常见原因：\n\n1. 缺少 `Authorization` 头\n2. Mind Key 无效（确认它以 `mk_` 开头）\n3. 在需要 Mind Key 的地方用了 JWT（或反之）\n4. Mind Key 已被吊销\n\n**修复：** 校验你的令牌。参见 [Authentication](/docs/getting-started/authentication)。\n\n## 为什么收到 404 Not Found？\n\n你用了错误的端点路径。Synapse 只有 `GET /endpoints` 中列出的路径。\n\n**修复：** 调用 `GET /endpoints` 查看所有有效路径。不要猜测。\n\n## 为什么收到 429 Too Many Requests？\n\n你使用了 `?key=` 查询参数认证，它被限速到 60 次/分钟。\n\n**修复：** 改用 `Authorization: Bearer` 头（无限制）。\n\n参见 [限速](/docs/api/rate-limits)。\n\n## 如何列出所有端点？\n\n```bash\ncurl https://synapse.schaefer.zone/endpoints\ncurl https://synapse.schaefer.zone/endpoints?format=text\n```\n\n## 如何找到正确的端点？\n\n1. 查看 `GET /endpoints` 获取机器可读列表\n2. 查看 `GET /help` 获取完整 API 文档\n3. 浏览 `GET /docs` 查看文档系统\n4. 使用 `GET /openapi.json` 获取 OpenAPI 3.0 规范\n\n## 能用 GET 代替 POST 吗？\n\n部分 POST 端点有对应的 GET 版本，供只能使用 URL 的工具使用：\n\n- `POST /memory` ↔ `GET /memory/store?content=...`\n- `POST /mind/task` ↔ `GET /mind/task?title=...`\n- `POST /chat/reply` ↔ `GET /chat/reply?content=...`\n\n通过 `GET /endpoints` 查看可用的 GET 变体。\n\n## 如何处理错误？\n\n所有错误都返回 JSON：\n\n```json\n{\n  \"statusCode\": 401,\n  \"error\": \"Unauthorized\",\n  \"message\": \"Mind Key fehlt oder ungültig.\",\n  \"docs\": \"https://synapse.schaefer.zone/docs/getting-started/authentication\"\n}\n```\n\n参见 [错误与错误处理](/docs/api/errors)。\n\n## 请求体大小限制是多少？\n\n10 MB。对于更大的 payload（例如文件上传），请使用 multipart 端点。\n\n## API 支持 CORS 吗？\n\n支持。所有端点都返回：\n\n```\nAccess-Control-Allow-Origin: *\nAccess-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS\nAccess-Control-Allow-Headers: Authorization, Content-Type, X-Synapse-JWT\n```\n\n## 有 SDK 吗？\n\n有：\n\n- **Node.js**：`npm install synapse-memory-sdk`\n- **MCP**：`npx -y synapse-mcp-api@latest`\n\n详见 [API 概览](/docs/api/overview)。\n\n## 如何分页？\n\n使用 `?limit=` 和 `?offset=`：\n\n```bash\ncurl \".../memory?limit=50&offset=100\"\n```\n\n默认 limit：100。最大：500。\n\n## 能按分类或标签过滤记忆吗？\n\n可以：\n\n```bash\ncurl \".../memory?category=project\"\ncurl \".../memory?tag=docker\"\ncurl \".../memory/by-tag?tag=production\"\n```\n\n## 如何搜索记忆？\n\n两种方式：\n\n1. **FTS5 关键词搜索**：`GET /memory/search?q=docker+swarm`\n2. **语义搜索**：`GET /memory/semantic-search?q=container+orchestration`\n\n参见 [FTS5 搜索](/docs/concepts/fts5-search) 与 [语义搜索](/docs/concepts/semantic-search)。\n\n## 如何更新记忆？\n\n用相同的 `category` + `key` 发起 `POST /memory` — 已存在的记忆会被更新，不会重复。\n\n```bash\n# 初始存储\ncurl -X POST .../memory -d '{\"category\":\"fact\",\"key\":\"user_name\",\"content\":\"Michael\"}'\n\n# 更新（相同 key）\ncurl -X POST .../memory -d '{\"category\":\"fact\",\"key\":\"user_name\",\"content\":\"Michael Schäfer\"}'\n```\n\n## 如何删除记忆？\n\n```bash\ncurl -X DELETE -H \"Authorization: Bearer $KEY\" \\\n     https://synapse.schaefer.zone/memory/mem_001\n```\n\n## 能批量删除吗？\n\n可以：\n\n```bash\ncurl -X POST .../memory/bulk-delete \\\n  -d '{\"ids\": [\"mem_001\", \"mem_002\", \"mem_003\"]}'\n```\n\n## 下一步\n\n- [API 概览](/docs/api/overview)\n- [错误与错误处理](/docs/api/errors)\n- [Authentication](/docs/getting-started/authentication)\n","content_html":"<h1>API 常见问题</h1>\n<p>关于 Synapse API 的常见问题。</p>\n<h2>如何认证？</h2>\n<p>两种方式：</p>\n<ol>\n<li><strong>Mind Key</strong>（用于数据端点）：<code>Authorization: Bearer mk_...</code></li>\n<li><strong>JWT</strong>（用于账户端点）：<code>Authorization: Bearer eyJ...</code></li>\n</ol>\n<p>或通过查询参数（限速 60 次/分钟）：<code>?key=mk_...</code></p>\n<p>参见 <a href=\"/docs/getting-started/authentication\">Authentication</a>。</p>\n<h2>Mind Key 和 JWT 有何区别？</h2>\n<ul>\n<li><strong>Mind Key</strong>：租户范围，永不过期，用于记忆/聊天/任务数据</li>\n<li><strong>JWT</strong>：用户范围，7 天过期，用于账户/Mind 管理</li>\n</ul>\n<p>参见 <a href=\"/docs/getting-started/mind-key-vs-jwt\">Mind Key 与 JWT</a>。</p>\n<h2>为什么收到 401 Unauthorized？</h2>\n<p>常见原因：</p>\n<ol>\n<li>缺少 <code>Authorization</code> 头</li>\n<li>Mind Key 无效（确认它以 <code>mk_</code> 开头）</li>\n<li>在需要 Mind Key 的地方用了 JWT（或反之）</li>\n<li>Mind Key 已被吊销</li>\n</ol>\n<p><strong>修复：</strong> 校验你的令牌。参见 <a href=\"/docs/getting-started/authentication\">Authentication</a>。</p>\n<h2>为什么收到 404 Not Found？</h2>\n<p>你用了错误的端点路径。Synapse 只有 <code>GET /endpoints</code> 中列出的路径。</p>\n<p><strong>修复：</strong> 调用 <code>GET /endpoints</code> 查看所有有效路径。不要猜测。</p>\n<h2>为什么收到 429 Too Many Requests？</h2>\n<p>你使用了 <code>?key=</code> 查询参数认证，它被限速到 60 次/分钟。</p>\n<p><strong>修复：</strong> 改用 <code>Authorization: Bearer</code> 头（无限制）。</p>\n<p>参见 <a href=\"/docs/api/rate-limits\">限速</a>。</p>\n<h2>如何列出所有端点？</h2>\n<pre><code class=\"hljs language-bash\">curl https://synapse.schaefer.zone/endpoints\ncurl https://synapse.schaefer.zone/endpoints?format=text</code></pre><h2>如何找到正确的端点？</h2>\n<ol>\n<li>查看 <code>GET /endpoints</code> 获取机器可读列表</li>\n<li>查看 <code>GET /help</code> 获取完整 API 文档</li>\n<li>浏览 <code>GET /docs</code> 查看文档系统</li>\n<li>使用 <code>GET /openapi.json</code> 获取 OpenAPI 3.0 规范</li>\n</ol>\n<h2>能用 GET 代替 POST 吗？</h2>\n<p>部分 POST 端点有对应的 GET 版本，供只能使用 URL 的工具使用：</p>\n<ul>\n<li><code>POST /memory</code> ↔ <code>GET /memory/store?content=...</code></li>\n<li><code>POST /mind/task</code> ↔ <code>GET /mind/task?title=...</code></li>\n<li><code>POST /chat/reply</code> ↔ <code>GET /chat/reply?content=...</code></li>\n</ul>\n<p>通过 <code>GET /endpoints</code> 查看可用的 GET 变体。</p>\n<h2>如何处理错误？</h2>\n<p>所有错误都返回 JSON：</p>\n<pre><code class=\"hljs language-json\"><span class=\"hljs-punctuation\">{</span>\n  <span class=\"hljs-attr\">&quot;statusCode&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-number\">401</span><span class=\"hljs-punctuation\">,</span>\n  <span class=\"hljs-attr\">&quot;error&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">&quot;Unauthorized&quot;</span><span class=\"hljs-punctuation\">,</span>\n  <span class=\"hljs-attr\">&quot;message&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">&quot;Mind Key fehlt oder ungültig.&quot;</span><span class=\"hljs-punctuation\">,</span>\n  <span class=\"hljs-attr\">&quot;docs&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">&quot;https://synapse.schaefer.zone/docs/getting-started/authentication&quot;</span>\n<span class=\"hljs-punctuation\">}</span></code></pre><p>参见 <a href=\"/docs/api/errors\">错误与错误处理</a>。</p>\n<h2>请求体大小限制是多少？</h2>\n<p>10 MB。对于更大的 payload（例如文件上传），请使用 multipart 端点。</p>\n<h2>API 支持 CORS 吗？</h2>\n<p>支持。所有端点都返回：</p>\n<pre><code class=\"hljs language-plaintext\">Access-Control-Allow-Origin: *\nAccess-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS\nAccess-Control-Allow-Headers: Authorization, Content-Type, X-Synapse-JWT</code></pre><h2>有 SDK 吗？</h2>\n<p>有：</p>\n<ul>\n<li><strong>Node.js</strong>：<code>npm install synapse-memory-sdk</code></li>\n<li><strong>MCP</strong>：<code>npx -y synapse-mcp-api@latest</code></li>\n</ul>\n<p>详见 <a href=\"/docs/api/overview\">API 概览</a>。</p>\n<h2>如何分页？</h2>\n<p>使用 <code>?limit=</code> 和 <code>?offset=</code>：</p>\n<pre><code class=\"hljs language-bash\">curl <span class=\"hljs-string\">&quot;.../memory?limit=50&amp;offset=100&quot;</span></code></pre><p>默认 limit：100。最大：500。</p>\n<h2>能按分类或标签过滤记忆吗？</h2>\n<p>可以：</p>\n<pre><code class=\"hljs language-bash\">curl <span class=\"hljs-string\">&quot;.../memory?category=project&quot;</span>\ncurl <span class=\"hljs-string\">&quot;.../memory?tag=docker&quot;</span>\ncurl <span class=\"hljs-string\">&quot;.../memory/by-tag?tag=production&quot;</span></code></pre><h2>如何搜索记忆？</h2>\n<p>两种方式：</p>\n<ol>\n<li><strong>FTS5 关键词搜索</strong>：<code>GET /memory/search?q=docker+swarm</code></li>\n<li><strong>语义搜索</strong>：<code>GET /memory/semantic-search?q=container+orchestration</code></li>\n</ol>\n<p>参见 <a href=\"/docs/concepts/fts5-search\">FTS5 搜索</a> 与 <a href=\"/docs/concepts/semantic-search\">语义搜索</a>。</p>\n<h2>如何更新记忆？</h2>\n<p>用相同的 <code>category</code> + <code>key</code> 发起 <code>POST /memory</code> — 已存在的记忆会被更新，不会重复。</p>\n<pre><code class=\"hljs language-bash\"><span class=\"hljs-comment\"># 初始存储</span>\ncurl -X POST .../memory -d <span class=\"hljs-string\">&#x27;{&quot;category&quot;:&quot;fact&quot;,&quot;key&quot;:&quot;user_name&quot;,&quot;content&quot;:&quot;Michael&quot;}&#x27;</span>\n\n<span class=\"hljs-comment\"># 更新（相同 key）</span>\ncurl -X POST .../memory -d <span class=\"hljs-string\">&#x27;{&quot;category&quot;:&quot;fact&quot;,&quot;key&quot;:&quot;user_name&quot;,&quot;content&quot;:&quot;Michael Schäfer&quot;}&#x27;</span></code></pre><h2>如何删除记忆？</h2>\n<pre><code class=\"hljs language-bash\">curl -X DELETE -H <span class=\"hljs-string\">&quot;Authorization: Bearer <span class=\"hljs-variable\">$KEY</span>&quot;</span> \\\n     https://synapse.schaefer.zone/memory/mem_001</code></pre><h2>能批量删除吗？</h2>\n<p>可以：</p>\n<pre><code class=\"hljs language-bash\">curl -X POST .../memory/bulk-delete \\\n  -d <span class=\"hljs-string\">&#x27;{&quot;ids&quot;: [&quot;mem_001&quot;, &quot;mem_002&quot;, &quot;mem_003&quot;]}&#x27;</span></code></pre><h2>下一步</h2>\n<ul>\n<li><a href=\"/docs/api/overview\">API 概览</a></li>\n<li><a href=\"/docs/api/errors\">错误与错误处理</a></li>\n<li><a href=\"/docs/getting-started/authentication\">Authentication</a></li>\n</ul>\n","urls":{"html":"/docs/faq/api-faq","text":"/docs/faq/api-faq?format=text","json":"/docs/faq/api-faq?format=json","llm":"/docs/faq/api-faq?format=llm"},"translations_available":["en","zh","hi","es","fr","ar","pt","ru","ja","de","it","ko","nl","pl","tr","sv","vi","th","id","uk"]}