{"title":"API FAQ","slug":"api-faq","category":"faq","summary":"Common API questions — auth, rate limits, error handling, endpoint discovery.","audience":["human","llm"],"tags":["faq","api","troubleshooting"],"difficulty":"beginner","updated":"2026-06-27","word_count":384,"read_minutes":2,"lang":"en","translated":true,"requested_lang":"en","content_markdown":"\n# API FAQ\n\nCommon questions about the Synapse API.\n\n## How do I authenticate?\n\nTwo methods:\n\n1. **Mind Key** (for data endpoints): `Authorization: Bearer mk_...`\n2. **JWT** (for account endpoints): `Authorization: Bearer eyJ...`\n\nOr via query parameter (60 req/min limit): `?key=mk_...`\n\nSee [Authentication](/docs/getting-started/authentication).\n\n## What's the difference between Mind Key and JWT?\n\n- **Mind Key**: tenant-scoped, never expires, for memory/chat/tasks data\n- **JWT**: user-scoped, 7-day expiry, for account/mind management\n\nSee [Mind Key vs JWT](/docs/getting-started/mind-key-vs-jwt).\n\n## Why am I getting 401 Unauthorized?\n\nCommon causes:\n\n1. Missing `Authorization` header\n2. Invalid Mind Key (verify it starts with `mk_`)\n3. Using a JWT where a Mind Key is required (or vice versa)\n4. Mind Key has been revoked\n\n**Fix:** Verify your token. See [Authentication](/docs/getting-started/authentication).\n\n## Why am I getting 404 Not Found?\n\nYou used a wrong endpoint path. Synapse only has the paths listed in\n`GET /endpoints`.\n\n**Fix:** Call `GET /endpoints` to see all valid paths. Don't guess.\n\n## Why am I getting 429 Too Many Requests?\n\nYou're using `?key=` query parameter auth, which is rate-limited to 60/min.\n\n**Fix:** Switch to `Authorization: Bearer` header (no rate limit).\n\nSee [Rate Limits](/docs/api/rate-limits).\n\n## How do I list all endpoints?\n\n```bash\ncurl https://synapse.schaefer.zone/endpoints\ncurl https://synapse.schaefer.zone/endpoints?format=text\n```\n\n## How do I find the right endpoint?\n\n1. Check `GET /endpoints` for the machine-readable list\n2. Check `GET /help` for full API docs\n3. Browse `GET /docs` for the documentation system\n4. Use `GET /openapi.json` for OpenAPI 3.0 spec\n\n## Can I use GET instead of POST?\n\nSome POST endpoints have GET equivalents for URL-only tools:\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\nCheck `GET /endpoints` for available GET variants.\n\n## How do I handle errors?\n\nAll errors return 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\nSee [Errors & Error Handling](/docs/api/errors).\n\n## What's the request body limit?\n\n10 MB. For larger payloads (e.g. file uploads), use the multipart endpoints.\n\n## Does the API support CORS?\n\nYes. All endpoints return:\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## Is there an SDK?\n\nYes:\n\n- **Node.js**: `npm install synapse-memory-sdk`\n- **MCP**: `npx -y synapse-mcp-api@latest`\n\nSee [API Overview](/docs/api/overview) for details.\n\n## How do I paginate?\n\nUse `?limit=` and `?offset=`:\n\n```bash\ncurl \".../memory?limit=50&offset=100\"\n```\n\nDefault limit: 100. Max: 500.\n\n## Can I filter memories by category or tag?\n\nYes:\n\n```bash\ncurl \".../memory?category=project\"\ncurl \".../memory?tag=docker\"\ncurl \".../memory/by-tag?tag=production\"\n```\n\n## How do I search memories?\n\nTwo ways:\n\n1. **FTS5 keyword search**: `GET /memory/search?q=docker+swarm`\n2. **Semantic search**: `GET /memory/semantic-search?q=container+orchestration`\n\nSee [FTS5 Search](/docs/concepts/fts5-search) and [Semantic Search](/docs/concepts/semantic-search).\n\n## How do I update a memory?\n\nPOST `/memory` with the same `category` + `key` — the existing memory is\nupdated, not duplicated.\n\n```bash\n# Initial store\ncurl -X POST .../memory -d '{\"category\":\"fact\",\"key\":\"user_name\",\"content\":\"Michael\"}'\n\n# Update (same key)\ncurl -X POST .../memory -d '{\"category\":\"fact\",\"key\":\"user_name\",\"content\":\"Michael Schäfer\"}'\n```\n\n## How do I delete a memory?\n\n```bash\ncurl -X DELETE -H \"Authorization: Bearer $KEY\" \\\n     https://synapse.schaefer.zone/memory/mem_001\n```\n\n## Can I bulk delete?\n\nYes:\n\n```bash\ncurl -X POST .../memory/bulk-delete \\\n  -d '{\"ids\": [\"mem_001\", \"mem_002\", \"mem_003\"]}'\n```\n\n## Next Steps\n\n- [API Overview](/docs/api/overview)\n- [Errors & Error Handling](/docs/api/errors)\n- [Authentication](/docs/getting-started/authentication)\n","content_html":"<h1>API FAQ</h1>\n<p>Common questions about the Synapse API.</p>\n<h2>How do I authenticate?</h2>\n<p>Two methods:</p>\n<ol>\n<li><strong>Mind Key</strong> (for data endpoints): <code>Authorization: Bearer mk_...</code></li>\n<li><strong>JWT</strong> (for account endpoints): <code>Authorization: Bearer eyJ...</code></li>\n</ol>\n<p>Or via query parameter (60 req/min limit): <code>?key=mk_...</code></p>\n<p>See <a href=\"/docs/getting-started/authentication\">Authentication</a>.</p>\n<h2>What&#39;s the difference between Mind Key and JWT?</h2>\n<ul>\n<li><strong>Mind Key</strong>: tenant-scoped, never expires, for memory/chat/tasks data</li>\n<li><strong>JWT</strong>: user-scoped, 7-day expiry, for account/mind management</li>\n</ul>\n<p>See <a href=\"/docs/getting-started/mind-key-vs-jwt\">Mind Key vs JWT</a>.</p>\n<h2>Why am I getting 401 Unauthorized?</h2>\n<p>Common causes:</p>\n<ol>\n<li>Missing <code>Authorization</code> header</li>\n<li>Invalid Mind Key (verify it starts with <code>mk_</code>)</li>\n<li>Using a JWT where a Mind Key is required (or vice versa)</li>\n<li>Mind Key has been revoked</li>\n</ol>\n<p><strong>Fix:</strong> Verify your token. See <a href=\"/docs/getting-started/authentication\">Authentication</a>.</p>\n<h2>Why am I getting 404 Not Found?</h2>\n<p>You used a wrong endpoint path. Synapse only has the paths listed in\n<code>GET /endpoints</code>.</p>\n<p><strong>Fix:</strong> Call <code>GET /endpoints</code> to see all valid paths. Don&#39;t guess.</p>\n<h2>Why am I getting 429 Too Many Requests?</h2>\n<p>You&#39;re using <code>?key=</code> query parameter auth, which is rate-limited to 60/min.</p>\n<p><strong>Fix:</strong> Switch to <code>Authorization: Bearer</code> header (no rate limit).</p>\n<p>See <a href=\"/docs/api/rate-limits\">Rate Limits</a>.</p>\n<h2>How do I list all endpoints?</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>How do I find the right endpoint?</h2>\n<ol>\n<li>Check <code>GET /endpoints</code> for the machine-readable list</li>\n<li>Check <code>GET /help</code> for full API docs</li>\n<li>Browse <code>GET /docs</code> for the documentation system</li>\n<li>Use <code>GET /openapi.json</code> for OpenAPI 3.0 spec</li>\n</ol>\n<h2>Can I use GET instead of POST?</h2>\n<p>Some POST endpoints have GET equivalents for URL-only tools:</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>Check <code>GET /endpoints</code> for available GET variants.</p>\n<h2>How do I handle errors?</h2>\n<p>All errors return 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>See <a href=\"/docs/api/errors\">Errors &amp; Error Handling</a>.</p>\n<h2>What&#39;s the request body limit?</h2>\n<p>10 MB. For larger payloads (e.g. file uploads), use the multipart endpoints.</p>\n<h2>Does the API support CORS?</h2>\n<p>Yes. All endpoints return:</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>Is there an SDK?</h2>\n<p>Yes:</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>See <a href=\"/docs/api/overview\">API Overview</a> for details.</p>\n<h2>How do I paginate?</h2>\n<p>Use <code>?limit=</code> and <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>Default limit: 100. Max: 500.</p>\n<h2>Can I filter memories by category or tag?</h2>\n<p>Yes:</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>How do I search memories?</h2>\n<p>Two ways:</p>\n<ol>\n<li><strong>FTS5 keyword search</strong>: <code>GET /memory/search?q=docker+swarm</code></li>\n<li><strong>Semantic search</strong>: <code>GET /memory/semantic-search?q=container+orchestration</code></li>\n</ol>\n<p>See <a href=\"/docs/concepts/fts5-search\">FTS5 Search</a> and <a href=\"/docs/concepts/semantic-search\">Semantic Search</a>.</p>\n<h2>How do I update a memory?</h2>\n<p>POST <code>/memory</code> with the same <code>category</code> + <code>key</code> — the existing memory is\nupdated, not duplicated.</p>\n<pre><code class=\"hljs language-bash\"><span class=\"hljs-comment\"># Initial store</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\"># Update (same 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>How do I delete a memory?</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>Can I bulk delete?</h2>\n<p>Yes:</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>Next Steps</h2>\n<ul>\n<li><a href=\"/docs/api/overview\">API Overview</a></li>\n<li><a href=\"/docs/api/errors\">Errors &amp; Error Handling</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"]}