{"title":"Autentikasi & Mind Keys","slug":"authentication","category":"getting-started","summary":"Bagaimana autentikasi Synapse bekerja: Mind Keys untuk agen, JWT untuk manusia, ?key= untuk alat yang hanya menggunakan URL.","audience":["human","llm"],"tags":["auth","mind-key","jwt","security"],"difficulty":"beginner","updated":"2026-06-27","word_count":477,"read_minutes":2,"llm_context":"Two auth methods: Mind Key (token-scoped, never expires) and JWT (user-scoped, 7-day expiry).\nMind Key: Authorization: Bearer mk_xxx OR ?key=mk_xxx (60 req/min limit on query)\nJWT: Authorization: Bearer eyJ... (no rate limit, used for /register, /login, /minds, /sharing)\nMind Key is shown only once at creation. Store it permanently.\nEach mind has exactly one Mind Key. Multiple minds = multiple keys.\n","lang":"id","translated":true,"requested_lang":"id","content_markdown":"\n# Autentikasi & Mind Keys\n\nSynapse menggunakan dua metode autentikasi, masing-masing dioptimalkan untuk\nkasus penggunaan yang berbeda. Memahami perbedaannya sangat penting untuk\nmembangun integrasi yang andal.\n\n## Dua Metode Autentikasi\n\n| Metode | Kasus Penggunaan | Rate Limit | Kedaluwarsa |\n|--------|----------|------------|--------|\n| **Mind Key** | Agen LLM, alat otomatis | Tidak ada (header) / 60 min (query) | Tidak pernah |\n| **JWT** | UI untuk manusia, operasi akun | Tidak ada | 7 hari |\n\n## Mind Key (untuk Agen)\n\nMind Key adalah token API dengan cakupan tenant. Token ini mengautentikasi data\nsatu mind (memori, tugas, chat, skrip, dll.). Gunakan untuk:\n\n- Agen LLM yang memanggil API\n- Skrip otomasi latar belakang\n- Konfigurasi MCP server\n- Integrasi berumur panjang apa pun\n\n### Autentikasi header (disarankan)\n\n```bash\ncurl -H \"Authorization: Bearer mk_yourMindKeyHere\" \\\n     https://synapse.schaefer.zone/memory/recall\n```\n\n### Parameter query (untuk alat yang hanya menggunakan URL)\n\n```bash\ncurl https://synapse.schaefer.zone/memory/recall?key=mk_yourMindKeyHere\n```\n\n> [!WARNING]\n> Parameter query `?key=` di-rate-limit ke **60 permintaan per menit**.\n> Header Bearer tidak memiliki rate limit. Gunakan header kapan pun klien Anda\n> mendukung header khusus.\n\n### Membuat Mind Key\n\n```bash\ncurl -X POST https://synapse.schaefer.zone/minds \\\n  -H \"Authorization: Bearer YOUR_JWT\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"name\": \"Work Mind\", \"description\": \"Project memories\"}'\n```\n\nRespons menyertakan `mind_key` — **simpan segera**, hanya ditampilkan sekali.\n\n### Mendaftar mind Anda\n\n```bash\ncurl -H \"Authorization: Bearer YOUR_JWT\" \\\n     https://synapse.schaefer.zone/minds\n```\n\n### Menghapus mind (ireversibel!)\n\n```bash\ncurl -X DELETE -H \"Authorization: Bearer YOUR_JWT\" \\\n     https://synapse.schaefer.zone/minds/m_xyz789\n```\n\n## JWT (untuk Manusia)\n\nJWT mengautentikasi **akun pengguna**, bukan mind spesifik. Gunakan untuk:\n\n- Pendaftaran dan login akun\n- Membuat / mendaftar / menghapus mind\n- Berbagi mind dengan pengguna lain\n- Manajemen langganan Web Push\n\n### Daftar\n\n```bash\ncurl -X POST https://synapse.schaefer.zone/register \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"email\": \"you@example.com\", \"password\": \"secret\"}'\n```\n\nMengembalikan: `{ \"jwt\": \"eyJ...\", \"user\": {...} }`\n\n### Login\n\n```bash\ncurl -X POST https://synapse.schaefer.zone/login \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"email\": \"you@example.com\", \"password\": \"secret\"}'\n```\n\nMengembalikan: `{ \"jwt\": \"eyJ...\", \"user\": {...} }`\n\n### Kedaluwarsa JWT\n\nJWT kedaluwarsa setelah **7 hari**. Saat JWT kedaluwarsa, cukup panggil `/login`\nlagi untuk mendapatkan yang baru. Mind Key tidak pernah kedaluwarsa, sehingga\nintegrasi agen yang ada tetap berfungsi.\n\n## Praktik Terbaik Keamanan\n\n> [!CRITICAL]\n> - **Jangan pernah commit Mind Key ke git.** Gunakan variabel lingkungan.\n> - **Jangan pernah mencatat Mind Key.** Mask di log (`mk_***...***xyz`).\n> - **Rotasi key** jika Anda mencurigai kebocoran (hapus mind, buat yang baru).\n> - **Gunakan satu mind per proyek** untuk membatasi dampak jika key bocor.\n\n### Pola variabel lingkungan\n\n```bash\n# .env (JANGAN PERNAH commit file ini)\nSYNAPSE_MIND_KEY=mk_yourMindKeyHere\nSYNAPSE_URL=https://synapse.schaefer.zone\n```\n\n```typescript\n// Node.js\nconst mindKey = process.env.SYNAPSE_MIND_KEY;\nconst url = process.env.SYNAPSE_URL;\nawait fetch(`${url}/memory/recall`, {\n  headers: { Authorization: `Bearer ${mindKey}` },\n});\n```\n\n### Konfigurasi MCP server\n\n```json\n{\n  \"mcpServers\": {\n    \"synapse\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"synapse-mcp-api@latest\"],\n      \"env\": {\n        \"SYNAPSE_MIND_KEY\": \"mk_yourMindKeyHere\",\n        \"SYNAPSE_URL\": \"https://synapse.schaefer.zone\"\n      }\n    }\n  }\n}\n```\n\n## Pola Multi-Mind\n\nSetiap pengguna dapat memiliki beberapa mind. Pola umum:\n\n| Nama Mind | Tujuan |\n|-----------|---------|\n| `work` | Memori terkait pekerjaan |\n| `personal` | Preferensi pribadi, keluarga |\n| `project-synapse` | Konteks proyek spesifik |\n| `learning-german` | Kemajuan belajar |\n| `assistant-default` | Fallback tujuan umum |\n\nGunakan Mind Key yang berbeda untuk sesi LLM yang berbeda untuk menjaga konteks tetap terisolasi.\n\n## Rate Limits\n\n| Metode Auth | Batas | Cakupan |\n|-------------|-------|-------|\n| Mind Key (header) | Tidak ada | Per-mind |\n| Mind Key (?key=) | 60/min | Per-IP |\n| JWT (header) | Tidak ada | Per-user |\n| Endpoint publik | Tidak ada | Global |\n\nHeader rate limit (`X-RateLimit-Limit`, `X-RateLimit-Remaining`, `Retry-After`)\ndisertakan dalam respons jika berlaku.\n\n## Langkah Berikutnya\n\n- [Mind Key vs JWT](/docs/getting-started/mind-key-vs-jwt) — kapan menggunakan yang mana\n- [Memory API](/docs/api/memory) — apa yang dapat Anda lakukan dengan Mind Key\n- [User API](/docs/api/user) — manajemen akun dengan JWT\n","content_html":"<h1>Autentikasi &amp; Mind Keys</h1>\n<p>Synapse menggunakan dua metode autentikasi, masing-masing dioptimalkan untuk\nkasus penggunaan yang berbeda. Memahami perbedaannya sangat penting untuk\nmembangun integrasi yang andal.</p>\n<h2>Dua Metode Autentikasi</h2>\n<table>\n<thead>\n<tr>\n<th>Metode</th>\n<th>Kasus Penggunaan</th>\n<th>Rate Limit</th>\n<th>Kedaluwarsa</th>\n</tr>\n</thead>\n<tbody><tr>\n<td><strong>Mind Key</strong></td>\n<td>Agen LLM, alat otomatis</td>\n<td>Tidak ada (header) / 60 min (query)</td>\n<td>Tidak pernah</td>\n</tr>\n<tr>\n<td><strong>JWT</strong></td>\n<td>UI untuk manusia, operasi akun</td>\n<td>Tidak ada</td>\n<td>7 hari</td>\n</tr>\n</tbody></table>\n<h2>Mind Key (untuk Agen)</h2>\n<p>Mind Key adalah token API dengan cakupan tenant. Token ini mengautentikasi data\nsatu mind (memori, tugas, chat, skrip, dll.). Gunakan untuk:</p>\n<ul>\n<li>Agen LLM yang memanggil API</li>\n<li>Skrip otomasi latar belakang</li>\n<li>Konfigurasi MCP server</li>\n<li>Integrasi berumur panjang apa pun</li>\n</ul>\n<h3>Autentikasi header (disarankan)</h3>\n<pre><code class=\"hljs language-bash\">curl -H <span class=\"hljs-string\">&quot;Authorization: Bearer mk_yourMindKeyHere&quot;</span> \\\n     https://synapse.schaefer.zone/memory/recall</code></pre><h3>Parameter query (untuk alat yang hanya menggunakan URL)</h3>\n<pre><code class=\"hljs language-bash\">curl https://synapse.schaefer.zone/memory/recall?key=mk_yourMindKeyHere</code></pre><div class=\"callout callout-warn\">Parameter query `?key=` di-rate-limit ke **60 permintaan per menit**.\nHeader Bearer tidak memiliki rate limit. Gunakan header kapan pun klien Anda\nmendukung header khusus.</div><h3>Membuat Mind Key</h3>\n<pre><code class=\"hljs language-bash\">curl -X POST https://synapse.schaefer.zone/minds \\\n  -H <span class=\"hljs-string\">&quot;Authorization: Bearer YOUR_JWT&quot;</span> \\\n  -H <span class=\"hljs-string\">&quot;Content-Type: application/json&quot;</span> \\\n  -d <span class=\"hljs-string\">&#x27;{&quot;name&quot;: &quot;Work Mind&quot;, &quot;description&quot;: &quot;Project memories&quot;}&#x27;</span></code></pre><p>Respons menyertakan <code>mind_key</code> — <strong>simpan segera</strong>, hanya ditampilkan sekali.</p>\n<h3>Mendaftar mind Anda</h3>\n<pre><code class=\"hljs language-bash\">curl -H <span class=\"hljs-string\">&quot;Authorization: Bearer YOUR_JWT&quot;</span> \\\n     https://synapse.schaefer.zone/minds</code></pre><h3>Menghapus mind (ireversibel!)</h3>\n<pre><code class=\"hljs language-bash\">curl -X DELETE -H <span class=\"hljs-string\">&quot;Authorization: Bearer YOUR_JWT&quot;</span> \\\n     https://synapse.schaefer.zone/minds/m_xyz789</code></pre><h2>JWT (untuk Manusia)</h2>\n<p>JWT mengautentikasi <strong>akun pengguna</strong>, bukan mind spesifik. Gunakan untuk:</p>\n<ul>\n<li>Pendaftaran dan login akun</li>\n<li>Membuat / mendaftar / menghapus mind</li>\n<li>Berbagi mind dengan pengguna lain</li>\n<li>Manajemen langganan Web Push</li>\n</ul>\n<h3>Daftar</h3>\n<pre><code class=\"hljs language-bash\">curl -X POST https://synapse.schaefer.zone/register \\\n  -H <span class=\"hljs-string\">&quot;Content-Type: application/json&quot;</span> \\\n  -d <span class=\"hljs-string\">&#x27;{&quot;email&quot;: &quot;you@example.com&quot;, &quot;password&quot;: &quot;secret&quot;}&#x27;</span></code></pre><p>Mengembalikan: <code>{ &quot;jwt&quot;: &quot;eyJ...&quot;, &quot;user&quot;: {...} }</code></p>\n<h3>Login</h3>\n<pre><code class=\"hljs language-bash\">curl -X POST https://synapse.schaefer.zone/login \\\n  -H <span class=\"hljs-string\">&quot;Content-Type: application/json&quot;</span> \\\n  -d <span class=\"hljs-string\">&#x27;{&quot;email&quot;: &quot;you@example.com&quot;, &quot;password&quot;: &quot;secret&quot;}&#x27;</span></code></pre><p>Mengembalikan: <code>{ &quot;jwt&quot;: &quot;eyJ...&quot;, &quot;user&quot;: {...} }</code></p>\n<h3>Kedaluwarsa JWT</h3>\n<p>JWT kedaluwarsa setelah <strong>7 hari</strong>. Saat JWT kedaluwarsa, cukup panggil <code>/login</code>\nlagi untuk mendapatkan yang baru. Mind Key tidak pernah kedaluwarsa, sehingga\nintegrasi agen yang ada tetap berfungsi.</p>\n<h2>Praktik Terbaik Keamanan</h2>\n<div class=\"callout callout-critical\"></div><h3>Pola variabel lingkungan</h3>\n<pre><code class=\"hljs language-bash\"><span class=\"hljs-comment\"># .env (JANGAN PERNAH commit file ini)</span>\nSYNAPSE_MIND_KEY=mk_yourMindKeyHere\nSYNAPSE_URL=https://synapse.schaefer.zone</code></pre><pre><code class=\"hljs language-typescript\"><span class=\"hljs-comment\">// Node.js</span>\n<span class=\"hljs-keyword\">const</span> mindKey = process.<span class=\"hljs-property\">env</span>.<span class=\"hljs-property\">SYNAPSE_MIND_KEY</span>;\n<span class=\"hljs-keyword\">const</span> url = process.<span class=\"hljs-property\">env</span>.<span class=\"hljs-property\">SYNAPSE_URL</span>;\n<span class=\"hljs-keyword\">await</span> <span class=\"hljs-title function_\">fetch</span>(<span class=\"hljs-string\">`<span class=\"hljs-subst\">${url}</span>/memory/recall`</span>, {\n  <span class=\"hljs-attr\">headers</span>: { <span class=\"hljs-title class_\">Authorization</span>: <span class=\"hljs-string\">`Bearer <span class=\"hljs-subst\">${mindKey}</span>`</span> },\n});</code></pre><h3>Konfigurasi MCP server</h3>\n<pre><code class=\"hljs language-json\"><span class=\"hljs-punctuation\">{</span>\n  <span class=\"hljs-attr\">&quot;mcpServers&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-punctuation\">{</span>\n    <span class=\"hljs-attr\">&quot;synapse&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-punctuation\">{</span>\n      <span class=\"hljs-attr\">&quot;command&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">&quot;npx&quot;</span><span class=\"hljs-punctuation\">,</span>\n      <span class=\"hljs-attr\">&quot;args&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-punctuation\">[</span><span class=\"hljs-string\">&quot;-y&quot;</span><span class=\"hljs-punctuation\">,</span> <span class=\"hljs-string\">&quot;synapse-mcp-api@latest&quot;</span><span class=\"hljs-punctuation\">]</span><span class=\"hljs-punctuation\">,</span>\n      <span class=\"hljs-attr\">&quot;env&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-punctuation\">{</span>\n        <span class=\"hljs-attr\">&quot;SYNAPSE_MIND_KEY&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">&quot;mk_yourMindKeyHere&quot;</span><span class=\"hljs-punctuation\">,</span>\n        <span class=\"hljs-attr\">&quot;SYNAPSE_URL&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">&quot;https://synapse.schaefer.zone&quot;</span>\n      <span class=\"hljs-punctuation\">}</span>\n    <span class=\"hljs-punctuation\">}</span>\n  <span class=\"hljs-punctuation\">}</span>\n<span class=\"hljs-punctuation\">}</span></code></pre><h2>Pola Multi-Mind</h2>\n<p>Setiap pengguna dapat memiliki beberapa mind. Pola umum:</p>\n<table>\n<thead>\n<tr>\n<th>Nama Mind</th>\n<th>Tujuan</th>\n</tr>\n</thead>\n<tbody><tr>\n<td><code>work</code></td>\n<td>Memori terkait pekerjaan</td>\n</tr>\n<tr>\n<td><code>personal</code></td>\n<td>Preferensi pribadi, keluarga</td>\n</tr>\n<tr>\n<td><code>project-synapse</code></td>\n<td>Konteks proyek spesifik</td>\n</tr>\n<tr>\n<td><code>learning-german</code></td>\n<td>Kemajuan belajar</td>\n</tr>\n<tr>\n<td><code>assistant-default</code></td>\n<td>Fallback tujuan umum</td>\n</tr>\n</tbody></table>\n<p>Gunakan Mind Key yang berbeda untuk sesi LLM yang berbeda untuk menjaga konteks tetap terisolasi.</p>\n<h2>Rate Limits</h2>\n<table>\n<thead>\n<tr>\n<th>Metode Auth</th>\n<th>Batas</th>\n<th>Cakupan</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>Mind Key (header)</td>\n<td>Tidak ada</td>\n<td>Per-mind</td>\n</tr>\n<tr>\n<td>Mind Key (?key=)</td>\n<td>60/min</td>\n<td>Per-IP</td>\n</tr>\n<tr>\n<td>JWT (header)</td>\n<td>Tidak ada</td>\n<td>Per-user</td>\n</tr>\n<tr>\n<td>Endpoint publik</td>\n<td>Tidak ada</td>\n<td>Global</td>\n</tr>\n</tbody></table>\n<p>Header rate limit (<code>X-RateLimit-Limit</code>, <code>X-RateLimit-Remaining</code>, <code>Retry-After</code>)\ndisertakan dalam respons jika berlaku.</p>\n<h2>Langkah Berikutnya</h2>\n<ul>\n<li><a href=\"/docs/getting-started/mind-key-vs-jwt\">Mind Key vs JWT</a> — kapan menggunakan yang mana</li>\n<li><a href=\"/docs/api/memory\">Memory API</a> — apa yang dapat Anda lakukan dengan Mind Key</li>\n<li><a href=\"/docs/api/user\">User API</a> — manajemen akun dengan JWT</li>\n</ul>\n","urls":{"html":"/docs/getting-started/authentication","text":"/docs/getting-started/authentication?format=text","json":"/docs/getting-started/authentication?format=json","llm":"/docs/getting-started/authentication?format=llm"},"translations_available":["en","zh","hi","es","fr","ar","pt","ru","ja","de","it","ko","nl","pl","tr","sv","vi","th","id","uk"]}