{"title":"Troubleshooting FAQ","slug":"troubleshooting","category":"faq","summary":"Solutions to common Synapse problems — auth, network, data, deployment.","audience":["human","llm"],"tags":["faq","troubleshooting","problems","solutions"],"difficulty":"beginner","updated":"2026-06-27","word_count":622,"read_minutes":3,"lang":"en","translated":true,"requested_lang":"en","content_markdown":"\n# Troubleshooting FAQ\n\nSolutions to common Synapse problems.\n\n## I can't login\n\n### Symptoms\n\n- `POST /login` returns 401\n- \"Invalid email or password\"\n\n### Solutions\n\n1. **Verify email is correct** — case sensitive\n2. **Check password** — minimum 6 characters\n3. **Register first** if you don't have an account: `POST /register`\n4. **Reset password** (if SMTP configured) via the web UI\n\n## I lost my Mind Key\n\n### Symptoms\n\n- Cannot access memories\n- Mind Key was deleted/lost\n\n### Solutions\n\nMind Keys cannot be recovered. You must:\n\n1. Login to get JWT: `POST /login`\n2. List minds: `GET /minds` (with JWT)\n3. Create new mind: `POST /minds`\n4. Save new Mind Key\n5. (Optional) Delete old mind: `DELETE /minds/:id`\n\n**Data in the old mind is lost** unless you can find the Mind Key.\n\n## API calls return 401\n\n### Symptoms\n\n- All API calls return 401 Unauthorized\n- \"Mind Key fehlt oder ungültig\"\n\n### Solutions\n\n1. **Verify header format**: `Authorization: Bearer mk_...`\n2. **Check Mind Key starts with `mk_`** (not `eyJ` which is JWT)\n3. **Test directly**:\n   ```bash\n   curl -H \"Authorization: Bearer mk_YOUR_KEY\" \\\n        https://synapse.schaefer.zone/memory/recall\n   ```\n4. **Mind Key may be revoked** — create a new mind\n\nSee [Authentication](/docs/getting-started/authentication).\n\n## API calls return 404\n\n### Symptoms\n\n- 404 Not Found\n- \"Route not found\"\n\n### Solutions\n\n> [!CRITICAL]\n> Don't guess endpoint paths. Only paths in `GET /endpoints` exist.\n\n1. **Check valid endpoints**: `curl https://synapse.schaefer.zone/endpoints`\n2. **Compare URL exactly** — case sensitive, no trailing slashes\n3. **Check HTTP method** — `GET /memory` vs `POST /memory` are different\n\n## API calls return 429\n\n### Symptoms\n\n- 429 Too Many Requests\n- \"Rate limit exceeded\"\n\n### Solutions\n\n1. **Switch to header auth** (no rate limit):\n   ```bash\n   # Don't\n   curl \".../memory/recall?key=mk_...\"\n   \n   # Do\n   curl -H \"Authorization: Bearer mk_...\" .../memory/recall\n   ```\n2. **Wait `Retry-After` seconds** if you must use `?key=`\n\nSee [Rate Limits](/docs/api/rate-limits).\n\n## Memory search returns no results\n\n### Symptoms\n\n- `GET /memory/search?q=...` returns empty\n- Know memories exist\n\n### Solutions\n\n1. **Verify memories exist**: `GET /memory/recall`\n2. **Check search syntax** — FTS5 has specific syntax\n3. **Try simpler query** — `?q=docker` instead of `?q=docker+swarm+deployment`\n4. **Use semantic search** for conceptual queries: `GET /memory/semantic-search?q=...`\n\nSee [FTS5 Search](/docs/concepts/fts5-search).\n\n## Memories are not persisting\n\n### Symptoms\n\n- POST /memory returns success\n- GET /memory/recall doesn't show them\n\n### Solutions\n\n1. **Verify same Mind Key** — different keys = different minds\n2. **Check response** — POST returns `{ \"id\": \"mem_...\", \"status\": \"stored\" }`\n3. **Try GET /memory** (JSON list) instead of /memory/recall (text)\n4. **Check filter** — `?category=` or `?tag=` may be hiding them\n\n## Tools not appearing in Claude Desktop\n\n### Symptoms\n\n- Claude Desktop shows 0 tools\n- No 🔌 icon\n\n### Solutions\n\n1. **Restart Claude Desktop fully** (Cmd+Q)\n2. **Verify config file** is valid JSON\n3. **Check Node.js 18+** installed\n4. **Run MCP manually**: `npx -y synapse-mcp-api@latest`\n5. **Check logs**: `~/Library/Logs/Claude/mcp.log`\n\nSee [MCP Troubleshooting](/docs/mcp/troubleshooting).\n\n## Synapse is offline\n\n### Symptoms\n\n- Cannot reach synapse.schaefer.zone\n- curl times out\n\n### Solutions\n\n1. **Check your internet** — try another site\n2. **Check Synapse health**: `curl https://synapse.schaefer.zone/health`\n3. **Wait** — may be temporary outage or deployment\n4. **Check status page** (if available)\n\nFor self-hosted: check Docker container status, database connection.\n\n## Database errors\n\n### Symptoms\n\n- 500 Internal Server Error\n- \"Database connection failed\"\n\n### Solutions\n\nFor self-hosted:\n\n1. **Check PostgreSQL running**: `docker ps | grep postgres`\n2. **Check DATABASE_URL** in env\n3. **Check migrations**: `npm run migrate:check`\n4. **Check disk space**: `df -h`\n\nFor hosted: report to support.\n\n## Webhook not firing\n\n### Symptoms\n\n- Registered webhook but not receiving callbacks\n- No POST to your URL\n\n### Solutions\n\n1. **Verify URL is reachable**: `curl -X POST your-url -d '{}'`\n2. **Check events filter** — `memory.*` matches all memory events\n3. **Test webhook**: `POST /webhooks/:id/test`\n4. **Check webhook is enabled**: `GET /webhooks/:id`\n5. **Verify SSL** — Synapse requires valid HTTPS for webhook URLs\n\nSee [Webhooks API](/docs/api/webhooks).\n\n## Cron job not running\n\n### Symptoms\n\n- Created cron job but it's not firing\n- `next_run` not updating\n\n### Solutions\n\n1. **Check schedule syntax** — must be valid 5-field cron OR integer seconds\n2. **Verify endpoint is allowed** — must be http(s), no private IPs\n3. **Check job is enabled**: `GET /cron`\n4. **Wait for next scheduled time** — cron isn't instant\n\nSee [Cron & Scheduler](/docs/api/cron).\n\n## Need More Help?\n\n1. **Check existing docs**: <https://synapse.schaefer.zone/docs>\n2. **Search docs**: `GET /docs/search?q=your+question`\n3. **Open issue**: <https://gitlab.com/schaefer-services/synapse/-/issues>\n4. **Contact**: see `/support` page\n\n## Next Steps\n\n- [Errors & Error Handling](/docs/api/errors)\n- [API FAQ](/docs/faq/api-faq)\n- [MCP Troubleshooting](/docs/mcp/troubleshooting)\n","content_html":"<h1>Troubleshooting FAQ</h1>\n<p>Solutions to common Synapse problems.</p>\n<h2>I can&#39;t login</h2>\n<h3>Symptoms</h3>\n<ul>\n<li><code>POST /login</code> returns 401</li>\n<li>&quot;Invalid email or password&quot;</li>\n</ul>\n<h3>Solutions</h3>\n<ol>\n<li><strong>Verify email is correct</strong> — case sensitive</li>\n<li><strong>Check password</strong> — minimum 6 characters</li>\n<li><strong>Register first</strong> if you don&#39;t have an account: <code>POST /register</code></li>\n<li><strong>Reset password</strong> (if SMTP configured) via the web UI</li>\n</ol>\n<h2>I lost my Mind Key</h2>\n<h3>Symptoms</h3>\n<ul>\n<li>Cannot access memories</li>\n<li>Mind Key was deleted/lost</li>\n</ul>\n<h3>Solutions</h3>\n<p>Mind Keys cannot be recovered. You must:</p>\n<ol>\n<li>Login to get JWT: <code>POST /login</code></li>\n<li>List minds: <code>GET /minds</code> (with JWT)</li>\n<li>Create new mind: <code>POST /minds</code></li>\n<li>Save new Mind Key</li>\n<li>(Optional) Delete old mind: <code>DELETE /minds/:id</code></li>\n</ol>\n<p><strong>Data in the old mind is lost</strong> unless you can find the Mind Key.</p>\n<h2>API calls return 401</h2>\n<h3>Symptoms</h3>\n<ul>\n<li>All API calls return 401 Unauthorized</li>\n<li>&quot;Mind Key fehlt oder ungültig&quot;</li>\n</ul>\n<h3>Solutions</h3>\n<ol>\n<li><strong>Verify header format</strong>: <code>Authorization: Bearer mk_...</code></li>\n<li><strong>Check Mind Key starts with <code>mk_</code></strong> (not <code>eyJ</code> which is JWT)</li>\n<li><strong>Test directly</strong>:<pre><code class=\"hljs language-bash\">curl -H <span class=\"hljs-string\">&quot;Authorization: Bearer mk_YOUR_KEY&quot;</span> \\\n     https://synapse.schaefer.zone/memory/recall</code></pre></li>\n<li><strong>Mind Key may be revoked</strong> — create a new mind</li>\n</ol>\n<p>See <a href=\"/docs/getting-started/authentication\">Authentication</a>.</p>\n<h2>API calls return 404</h2>\n<h3>Symptoms</h3>\n<ul>\n<li>404 Not Found</li>\n<li>&quot;Route not found&quot;</li>\n</ul>\n<h3>Solutions</h3>\n<div class=\"callout callout-critical\">Don't guess endpoint paths. Only paths in `GET /endpoints` exist.</div><ol>\n<li><strong>Check valid endpoints</strong>: <code>curl https://synapse.schaefer.zone/endpoints</code></li>\n<li><strong>Compare URL exactly</strong> — case sensitive, no trailing slashes</li>\n<li><strong>Check HTTP method</strong> — <code>GET /memory</code> vs <code>POST /memory</code> are different</li>\n</ol>\n<h2>API calls return 429</h2>\n<h3>Symptoms</h3>\n<ul>\n<li>429 Too Many Requests</li>\n<li>&quot;Rate limit exceeded&quot;</li>\n</ul>\n<h3>Solutions</h3>\n<ol>\n<li><strong>Switch to header auth</strong> (no rate limit):<pre><code class=\"hljs language-bash\"><span class=\"hljs-comment\"># Don&#x27;t</span>\ncurl <span class=\"hljs-string\">&quot;.../memory/recall?key=mk_...&quot;</span>\n\n<span class=\"hljs-comment\"># Do</span>\ncurl -H <span class=\"hljs-string\">&quot;Authorization: Bearer mk_...&quot;</span> .../memory/recall</code></pre></li>\n<li><strong>Wait <code>Retry-After</code> seconds</strong> if you must use <code>?key=</code></li>\n</ol>\n<p>See <a href=\"/docs/api/rate-limits\">Rate Limits</a>.</p>\n<h2>Memory search returns no results</h2>\n<h3>Symptoms</h3>\n<ul>\n<li><code>GET /memory/search?q=...</code> returns empty</li>\n<li>Know memories exist</li>\n</ul>\n<h3>Solutions</h3>\n<ol>\n<li><strong>Verify memories exist</strong>: <code>GET /memory/recall</code></li>\n<li><strong>Check search syntax</strong> — FTS5 has specific syntax</li>\n<li><strong>Try simpler query</strong> — <code>?q=docker</code> instead of <code>?q=docker+swarm+deployment</code></li>\n<li><strong>Use semantic search</strong> for conceptual queries: <code>GET /memory/semantic-search?q=...</code></li>\n</ol>\n<p>See <a href=\"/docs/concepts/fts5-search\">FTS5 Search</a>.</p>\n<h2>Memories are not persisting</h2>\n<h3>Symptoms</h3>\n<ul>\n<li>POST /memory returns success</li>\n<li>GET /memory/recall doesn&#39;t show them</li>\n</ul>\n<h3>Solutions</h3>\n<ol>\n<li><strong>Verify same Mind Key</strong> — different keys = different minds</li>\n<li><strong>Check response</strong> — POST returns <code>{ &quot;id&quot;: &quot;mem_...&quot;, &quot;status&quot;: &quot;stored&quot; }</code></li>\n<li><strong>Try GET /memory</strong> (JSON list) instead of /memory/recall (text)</li>\n<li><strong>Check filter</strong> — <code>?category=</code> or <code>?tag=</code> may be hiding them</li>\n</ol>\n<h2>Tools not appearing in Claude Desktop</h2>\n<h3>Symptoms</h3>\n<ul>\n<li>Claude Desktop shows 0 tools</li>\n<li>No 🔌 icon</li>\n</ul>\n<h3>Solutions</h3>\n<ol>\n<li><strong>Restart Claude Desktop fully</strong> (Cmd+Q)</li>\n<li><strong>Verify config file</strong> is valid JSON</li>\n<li><strong>Check Node.js 18+</strong> installed</li>\n<li><strong>Run MCP manually</strong>: <code>npx -y synapse-mcp-api@latest</code></li>\n<li><strong>Check logs</strong>: <code>~/Library/Logs/Claude/mcp.log</code></li>\n</ol>\n<p>See <a href=\"/docs/mcp/troubleshooting\">MCP Troubleshooting</a>.</p>\n<h2>Synapse is offline</h2>\n<h3>Symptoms</h3>\n<ul>\n<li>Cannot reach synapse.schaefer.zone</li>\n<li>curl times out</li>\n</ul>\n<h3>Solutions</h3>\n<ol>\n<li><strong>Check your internet</strong> — try another site</li>\n<li><strong>Check Synapse health</strong>: <code>curl https://synapse.schaefer.zone/health</code></li>\n<li><strong>Wait</strong> — may be temporary outage or deployment</li>\n<li><strong>Check status page</strong> (if available)</li>\n</ol>\n<p>For self-hosted: check Docker container status, database connection.</p>\n<h2>Database errors</h2>\n<h3>Symptoms</h3>\n<ul>\n<li>500 Internal Server Error</li>\n<li>&quot;Database connection failed&quot;</li>\n</ul>\n<h3>Solutions</h3>\n<p>For self-hosted:</p>\n<ol>\n<li><strong>Check PostgreSQL running</strong>: <code>docker ps | grep postgres</code></li>\n<li><strong>Check DATABASE_URL</strong> in env</li>\n<li><strong>Check migrations</strong>: <code>npm run migrate:check</code></li>\n<li><strong>Check disk space</strong>: <code>df -h</code></li>\n</ol>\n<p>For hosted: report to support.</p>\n<h2>Webhook not firing</h2>\n<h3>Symptoms</h3>\n<ul>\n<li>Registered webhook but not receiving callbacks</li>\n<li>No POST to your URL</li>\n</ul>\n<h3>Solutions</h3>\n<ol>\n<li><strong>Verify URL is reachable</strong>: <code>curl -X POST your-url -d &#39;{}&#39;</code></li>\n<li><strong>Check events filter</strong> — <code>memory.*</code> matches all memory events</li>\n<li><strong>Test webhook</strong>: <code>POST /webhooks/:id/test</code></li>\n<li><strong>Check webhook is enabled</strong>: <code>GET /webhooks/:id</code></li>\n<li><strong>Verify SSL</strong> — Synapse requires valid HTTPS for webhook URLs</li>\n</ol>\n<p>See <a href=\"/docs/api/webhooks\">Webhooks API</a>.</p>\n<h2>Cron job not running</h2>\n<h3>Symptoms</h3>\n<ul>\n<li>Created cron job but it&#39;s not firing</li>\n<li><code>next_run</code> not updating</li>\n</ul>\n<h3>Solutions</h3>\n<ol>\n<li><strong>Check schedule syntax</strong> — must be valid 5-field cron OR integer seconds</li>\n<li><strong>Verify endpoint is allowed</strong> — must be http(s), no private IPs</li>\n<li><strong>Check job is enabled</strong>: <code>GET /cron</code></li>\n<li><strong>Wait for next scheduled time</strong> — cron isn&#39;t instant</li>\n</ol>\n<p>See <a href=\"/docs/api/cron\">Cron &amp; Scheduler</a>.</p>\n<h2>Need More Help?</h2>\n<ol>\n<li><strong>Check existing docs</strong>: <a href=\"https://synapse.schaefer.zone/docs\">https://synapse.schaefer.zone/docs</a></li>\n<li><strong>Search docs</strong>: <code>GET /docs/search?q=your+question</code></li>\n<li><strong>Open issue</strong>: <a href=\"https://gitlab.com/schaefer-services/synapse/-/issues\">https://gitlab.com/schaefer-services/synapse/-/issues</a></li>\n<li><strong>Contact</strong>: see <code>/support</code> page</li>\n</ol>\n<h2>Next Steps</h2>\n<ul>\n<li><a href=\"/docs/api/errors\">Errors &amp; Error Handling</a></li>\n<li><a href=\"/docs/faq/api-faq\">API FAQ</a></li>\n<li><a href=\"/docs/mcp/troubleshooting\">MCP Troubleshooting</a></li>\n</ul>\n","urls":{"html":"/docs/faq/troubleshooting","text":"/docs/faq/troubleshooting?format=text","json":"/docs/faq/troubleshooting?format=json","llm":"/docs/faq/troubleshooting?format=llm"},"translations_available":["en","zh","hi","es","fr","ar","pt","ru","ja","de","it","ko","nl","pl","tr","sv","vi","th","id","uk"]}