{"title":"Autoryzacja i Mind Key","slug":"authentication","category":"getting-started","summary":"Jak działa autoryzacja w Synapse: Mind Key dla agentów, JWT dla ludzi, ?key= dla narzędzi obsługujących tylko URL.","audience":["human","llm"],"tags":["auth","mind-key","jwt","security"],"difficulty":"beginner","updated":"2026-06-27","word_count":471,"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":"pl","translated":true,"requested_lang":"pl","content_markdown":"\n# Autoryzacja i Mind Key\n\nSynapse używa dwóch metod autoryzacji, każda zoptymalizowana pod inny przypadek.\nZrozumienie różnicy jest kluczowe dla budowy niezawodnych integracji.\n\n## Dwie metody autoryzacji\n\n| Metoda | Przypadek użycia | Limit żądań | Wygasanie |\n|--------|----------|------------|--------|\n| **Mind Key** | Agenty LLM, narzędzia zautomatyzowane | Brak (nagłówek) / 60 min (zapytanie) | Nigdy |\n| **JWT** | Interfejs dla człowieka, operacje na koncie | Brak | 7 dni |\n\n## Mind Key (dla agentów)\n\nMind Key to token API o zakresie dzierżawcy. Uwierzytelnia dane pojedynczego\numysłu (wspomnienia, zadania, czat, skrypty itp.). Stosować do:\n\n- Agentów LLM wywołujących API\n- Skryptów automatyzacji w tle\n- Konfiguracji serwera MCP\n- Dowolnej długotrwałej integracji\n\n### Autoryzacja nagłówkiem (zalecane)\n\n```bash\ncurl -H \"Authorization: Bearer mk_yourMindKeyHere\" \\\n     https://synapse.schaefer.zone/memory/recall\n```\n\n### Parametr zapytania (dla narzędzi obsługujących tylko URL)\n\n```bash\ncurl https://synapse.schaefer.zone/memory/recall?key=mk_yourMindKeyHere\n```\n\n> [!WARNING]\n> Parametr zapytania `?key=` jest ograniczony do **60 żądań na minutę**. Nagłówek\n> Bearer nie ma limitu. Należy używać nagłówka zawsze, gdy klient obsługuje\n> własne nagłówki.\n\n### Tworzenie 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\nOdpowiedź zawiera `mind_key` — **należy go natychmiast zapisać**, jest\nwyświetlany tylko raz.\n\n### Wylistowanie umysłów\n\n```bash\ncurl -H \"Authorization: Bearer YOUR_JWT\" \\\n     https://synapse.schaefer.zone/minds\n```\n\n### Usuwanie umysłu (nieodwracalne!)\n\n```bash\ncurl -X DELETE -H \"Authorization: Bearer YOUR_JWT\" \\\n     https://synapse.schaefer.zone/minds/m_xyz789\n```\n\n## JWT (dla ludzi)\n\nJWT uwierzytelnia **konto użytkownika**, a nie konkretny umysł. Stosować do:\n\n- Rejestracji konta i logowania\n- Tworzenia / listowania / usuwania umysłów\n- Współdzielenia umysłów z innymi użytkownikami\n- Zarządzania subskrypcjami Web Push\n\n### Rejestracja\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\nZwraca: `{ \"jwt\": \"eyJ...\", \"user\": {...} }`\n\n### Logowanie\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\nZwraca: `{ \"jwt\": \"eyJ...\", \"user\": {...} }`\n\n### Wygasanie JWT\n\nJWT wygasają po **7 dniach**. Po wygaśnięciu należy po prostu ponownie wywołać\n`/login`, aby uzyskać nowy. Mind Key nigdy nie wygasa, więc istniejące integracje\nagentów nadal działają.\n\n## Najlepsze praktyki bezpieczeństwa\n\n> [!CRITICAL]\n> - **Nigdy nie commitować Mind Key do gita.** Używać zmiennych środowiskowych.\n> - **Nigdy nie logować Mind Key.** Maskować je w logach (`mk_***...***xyz`).\n> - **Rotować klucze** w razie podejrzenia wycieku (usunąć umysł, utworzyć nowy).\n> - **Używać jednego umysłu na projekt**, aby ograniczyć obszar rażenia przy wycieku klucza.\n\n### Wzorzec zmiennych środowiskowych\n\n```bash\n# .env (NIGDY nie commitować tego pliku)\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### Konfiguracja serwera MCP\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## Wzorzec wielu umysłów\n\nKażdy użytkownik może mieć wiele umysłów. Typowe wzorce:\n\n| Nazwa umysłu | Przeznaczenie |\n|-----------|---------|\n| `work` | Wspomnienia związane z pracą |\n| `personal` | Preferencje osobiste, rodzina |\n| `project-synapse` | Kontekst konkretnego projektu |\n| `learning-german` | Postęp w nauce |\n| `assistant-default` | Ogólnego przeznaczenia, zapasowy |\n\nNależy używać różnych Mind Key dla różnych sesji LLM, aby utrzymać konteksty\noddzielone.\n\n## Limity żądań\n\n| Metoda autoryzacji | Limit | Zakres |\n|-------------|-------|-------|\n| Mind Key (nagłówek) | Brak | Na umysł |\n| Mind Key (?key=) | 60/min | Na IP |\n| JWT (nagłówek) | Brak | Na użytkownika |\n| Endpointy publiczne | Brak | Globalny |\n\nNagłówki limitu żądań (`X-RateLimit-Limit`, `X-RateLimit-Remaining`, `Retry-After`)\nsą dołączane do odpowiedzi, gdy ma to zastosowanie.\n\n## Następne kroki\n\n- [Mind Key vs JWT](/docs/getting-started/mind-key-vs-jwt) — kiedy którego używać\n- [Memory API](/docs/api/memory) — co można robić z Mind Key\n- [User API](/docs/api/user) — zarządzanie kontem z JWT\n","content_html":"<h1>Autoryzacja i Mind Key</h1>\n<p>Synapse używa dwóch metod autoryzacji, każda zoptymalizowana pod inny przypadek.\nZrozumienie różnicy jest kluczowe dla budowy niezawodnych integracji.</p>\n<h2>Dwie metody autoryzacji</h2>\n<table>\n<thead>\n<tr>\n<th>Metoda</th>\n<th>Przypadek użycia</th>\n<th>Limit żądań</th>\n<th>Wygasanie</th>\n</tr>\n</thead>\n<tbody><tr>\n<td><strong>Mind Key</strong></td>\n<td>Agenty LLM, narzędzia zautomatyzowane</td>\n<td>Brak (nagłówek) / 60 min (zapytanie)</td>\n<td>Nigdy</td>\n</tr>\n<tr>\n<td><strong>JWT</strong></td>\n<td>Interfejs dla człowieka, operacje na koncie</td>\n<td>Brak</td>\n<td>7 dni</td>\n</tr>\n</tbody></table>\n<h2>Mind Key (dla agentów)</h2>\n<p>Mind Key to token API o zakresie dzierżawcy. Uwierzytelnia dane pojedynczego\numysłu (wspomnienia, zadania, czat, skrypty itp.). Stosować do:</p>\n<ul>\n<li>Agentów LLM wywołujących API</li>\n<li>Skryptów automatyzacji w tle</li>\n<li>Konfiguracji serwera MCP</li>\n<li>Dowolnej długotrwałej integracji</li>\n</ul>\n<h3>Autoryzacja nagłówkiem (zalecane)</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>Parametr zapytania (dla narzędzi obsługujących tylko 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\">Parametr zapytania `?key=` jest ograniczony do **60 żądań na minutę**. Nagłówek\nBearer nie ma limitu. Należy używać nagłówka zawsze, gdy klient obsługuje\nwłasne nagłówki.</div><h3>Tworzenie 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>Odpowiedź zawiera <code>mind_key</code> — <strong>należy go natychmiast zapisać</strong>, jest\nwyświetlany tylko raz.</p>\n<h3>Wylistowanie umysłów</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>Usuwanie umysłu (nieodwracalne!)</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 (dla ludzi)</h2>\n<p>JWT uwierzytelnia <strong>konto użytkownika</strong>, a nie konkretny umysł. Stosować do:</p>\n<ul>\n<li>Rejestracji konta i logowania</li>\n<li>Tworzenia / listowania / usuwania umysłów</li>\n<li>Współdzielenia umysłów z innymi użytkownikami</li>\n<li>Zarządzania subskrypcjami Web Push</li>\n</ul>\n<h3>Rejestracja</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>Zwraca: <code>{ &quot;jwt&quot;: &quot;eyJ...&quot;, &quot;user&quot;: {...} }</code></p>\n<h3>Logowanie</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>Zwraca: <code>{ &quot;jwt&quot;: &quot;eyJ...&quot;, &quot;user&quot;: {...} }</code></p>\n<h3>Wygasanie JWT</h3>\n<p>JWT wygasają po <strong>7 dniach</strong>. Po wygaśnięciu należy po prostu ponownie wywołać\n<code>/login</code>, aby uzyskać nowy. Mind Key nigdy nie wygasa, więc istniejące integracje\nagentów nadal działają.</p>\n<h2>Najlepsze praktyki bezpieczeństwa</h2>\n<div class=\"callout callout-critical\"></div><h3>Wzorzec zmiennych środowiskowych</h3>\n<pre><code class=\"hljs language-bash\"><span class=\"hljs-comment\"># .env (NIGDY nie commitować tego pliku)</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>Konfiguracja serwera MCP</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>Wzorzec wielu umysłów</h2>\n<p>Każdy użytkownik może mieć wiele umysłów. Typowe wzorce:</p>\n<table>\n<thead>\n<tr>\n<th>Nazwa umysłu</th>\n<th>Przeznaczenie</th>\n</tr>\n</thead>\n<tbody><tr>\n<td><code>work</code></td>\n<td>Wspomnienia związane z pracą</td>\n</tr>\n<tr>\n<td><code>personal</code></td>\n<td>Preferencje osobiste, rodzina</td>\n</tr>\n<tr>\n<td><code>project-synapse</code></td>\n<td>Kontekst konkretnego projektu</td>\n</tr>\n<tr>\n<td><code>learning-german</code></td>\n<td>Postęp w nauce</td>\n</tr>\n<tr>\n<td><code>assistant-default</code></td>\n<td>Ogólnego przeznaczenia, zapasowy</td>\n</tr>\n</tbody></table>\n<p>Należy używać różnych Mind Key dla różnych sesji LLM, aby utrzymać konteksty\noddzielone.</p>\n<h2>Limity żądań</h2>\n<table>\n<thead>\n<tr>\n<th>Metoda autoryzacji</th>\n<th>Limit</th>\n<th>Zakres</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>Mind Key (nagłówek)</td>\n<td>Brak</td>\n<td>Na umysł</td>\n</tr>\n<tr>\n<td>Mind Key (?key=)</td>\n<td>60/min</td>\n<td>Na IP</td>\n</tr>\n<tr>\n<td>JWT (nagłówek)</td>\n<td>Brak</td>\n<td>Na użytkownika</td>\n</tr>\n<tr>\n<td>Endpointy publiczne</td>\n<td>Brak</td>\n<td>Globalny</td>\n</tr>\n</tbody></table>\n<p>Nagłówki limitu żądań (<code>X-RateLimit-Limit</code>, <code>X-RateLimit-Remaining</code>, <code>Retry-After</code>)\nsą dołączane do odpowiedzi, gdy ma to zastosowanie.</p>\n<h2>Następne kroki</h2>\n<ul>\n<li><a href=\"/docs/getting-started/mind-key-vs-jwt\">Mind Key vs JWT</a> — kiedy którego używać</li>\n<li><a href=\"/docs/api/memory\">Memory API</a> — co można robić z Mind Key</li>\n<li><a href=\"/docs/api/user\">User API</a> — zarządzanie kontem z 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"]}