{"title":"Ratelimits & Quota","slug":"rate-limits","category":"api","summary":"Ratelimit-beleid voor de Synapse API — Bearer-header (onbeperkt), ?key= (60/min), openbare eindpunten.","audience":["human","llm"],"tags":["api","rate-limits","quotas","throttling"],"difficulty":"beginner","updated":"2026-06-27","word_count":294,"read_minutes":1,"llm_context":"Mind Key (Authorization: Bearer header) → NO rate limit\nMind Key (?key= query param) → 60 req/min per IP\nJWT (Authorization: Bearer header) → NO rate limit\nPublic endpoints (/tools/*, /docs, /health, /endpoints) → NO rate limit\nRate limit headers: X-RateLimit-Limit, X-RateLimit-Remaining, Retry-After\nRecommendation: ALWAYS use Authorization header. Use ?key= only for URL-only tools.\n","lang":"nl","translated":true,"requested_lang":"nl","content_markdown":"\n# Ratelimits & Quota\n\nSynapse heeft een eenvoudig, voorspelbaar ratelimit-beleid dat is ontworpen om misbruik\nte voorkomen zonder legitiem gebruik in de weg te zitten.\n\n## Ratelimit-beleid\n\n| Auth-methode | Limiet | Bereik |\n|--------------|--------|--------|\n| Mind Key (`Authorization: Bearer`) | **Geen** | Per-mind |\n| Mind Key (`?key=`) | 60 aanvragen/min | Per-IP |\n| JWT (`Authorization: Bearer`) | **Geen** | Per-gebruiker |\n| Openbare eindpunten | **Geen** | Globaal |\n\n> [!TIP]\n> **Gebruik waar mogelijk altijd de `Authorization: Bearer`-header.** Deze heeft geen\n> ratelimit. Gebruik `?key=` alleen voor tools die geen custom headers kunnen instellen.\n\n## Ratelimit-headers\n\nWanneer u `?key=`-authenticatie gebruikt, bevatten responsen ratelimit-headers:\n\n```\nX-RateLimit-Limit: 60\nX-RateLimit-Remaining: 42\nX-RateLimit-Reset: 1782567840\n```\n\nWanneer u de limiet overschrijdt:\n\n```\nHTTP/1.1 429 Too Many Requests\nX-RateLimit-Limit: 60\nX-RateLimit-Remaining: 0\nRetry-After: 42\nContent-Type: application/json\n\n{\n  \"statusCode\": 429,\n  \"error\": \"Too Many Requests\",\n  \"message\": \"Rate limit exceeded. Use Authorization header for unlimited access.\"\n}\n```\n\n## Als u een ratelimit raakt\n\nAls u een 429 krijgt:\n\n1. **Schakel over naar de Authorization-header** (aanbevolen):\n   ```bash\n   # Niet: ?key=YOUR_MIND_KEY (60/min limiet)\n   curl \".../memory/recall?key=YOUR_MIND_KEY\"\n   \n   # Wel: Authorization-header (onbeperkt)\n   curl -H \"Authorization: Bearer YOUR_MIND_KEY\" .../memory/recall\n   ```\n\n2. **Of wacht `Retry-After` seconden** en probeer opnieuw.\n\n## Waarom de ?key= limiet bestaat\n\nDe `?key=`-queryparameter is handig voor URL-only tools (browsers,\n`open`-commando's), maar heeft beveiligings- en prestatie-implicaties:\n\n- **Beveiliging:** Queryparameters worden gelogd in server-accesslogs, browsergeschiedenis\n  en Referer-headers. Beperking van gebruik verkleint de blootstelling.\n- **Prestaties:** Queryparameter-authenticatie vereist een IP-gebaseerde ratelimiter\n  (Redis-lookup per verzoek), wat latency toevoegt. Header-authenticatie slaat dit over.\n- **Misbruikpreventie:** Een gelekte `?key=`-URL kan worden gedeeld en gebombardeerd.\n  De IP-limiet beperkt de schade.\n\n## Aanbevolen patronen\n\n### LLM-agents\n\n```python\n# Always use header auth\nheaders = {\"Authorization\": f\"Bearer {MIND_KEY}\"}\nresponse = requests.get(f\"{URL}/memory/recall\", headers=headers)\n```\n\n### Browser-gebaseerde tools\n\nAls uw tool alleen URL's kan openen:\n\n```bash\n# OK voor incidenteel gebruik (onder 60/min)\nopen \"https://synapse.schaefer.zone/memory/recall?key=YOUR_MIND_KEY\"\n\n# Voor frequent gebruik, schakel over naar een tool die headers ondersteunt\ncurl -H \"Authorization: Bearer YOUR_MIND_KEY\" .../memory/recall\n```\n\n### MCP-server\n\nMCP-servers gebruiken altijd header-authenticatie via de `SYNAPSE_MIND_KEY`-env-var —\ngeen ratelimit van toepassing.\n\n### Bulk-imports\n\nVoor bulkoperaties (bijv. 1000 herinneringen importeren), gebruik altijd header-authenticatie.\nBulk-imports via `?key=` raken de ratelimit binnen 1 minuut.\n\n## Quota (op mind-niveau)\n\nEr zijn momenteel geen per-mind quota voor opslaggrootte of aantal herinneringen. Alle\nlimieten zitten op het auth/IP-niveau, niet op dataniveau. Dit kan in de toekomst\nveranderen voor multi-tenant fairshare.\n\n## Uw gebruik monitoren\n\n```bash\n# Controleer uw huidige ratelimit-status (met ?key=-authenticatie)\ncurl -i \"https://synapse.schaefer.zone/memory/stats?key=YOUR_MIND_KEY\" | grep -i ratelimit\n\n# Output:\n# X-RateLimit-Limit: 60\n# X-RateLimit-Remaining: 58\n# X-RateLimit-Reset: 1782567840\n```\n\n## Volgende stappen\n\n- [Authenticatie](/docs/getting-started/authentication)\n- [Fouten & Foutafhandeling](/docs/api/errors)\n","content_html":"<h1>Ratelimits &amp; Quota</h1>\n<p>Synapse heeft een eenvoudig, voorspelbaar ratelimit-beleid dat is ontworpen om misbruik\nte voorkomen zonder legitiem gebruik in de weg te zitten.</p>\n<h2>Ratelimit-beleid</h2>\n<table>\n<thead>\n<tr>\n<th>Auth-methode</th>\n<th>Limiet</th>\n<th>Bereik</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>Mind Key (<code>Authorization: Bearer</code>)</td>\n<td><strong>Geen</strong></td>\n<td>Per-mind</td>\n</tr>\n<tr>\n<td>Mind Key (<code>?key=</code>)</td>\n<td>60 aanvragen/min</td>\n<td>Per-IP</td>\n</tr>\n<tr>\n<td>JWT (<code>Authorization: Bearer</code>)</td>\n<td><strong>Geen</strong></td>\n<td>Per-gebruiker</td>\n</tr>\n<tr>\n<td>Openbare eindpunten</td>\n<td><strong>Geen</strong></td>\n<td>Globaal</td>\n</tr>\n</tbody></table>\n<div class=\"callout callout-ok\">**Gebruik waar mogelijk altijd de `Authorization: Bearer`-header.** Deze heeft geen\nratelimit. Gebruik `?key=` alleen voor tools die geen custom headers kunnen instellen.</div><h2>Ratelimit-headers</h2>\n<p>Wanneer u <code>?key=</code>-authenticatie gebruikt, bevatten responsen ratelimit-headers:</p>\n<pre><code class=\"hljs language-plaintext\">X-RateLimit-Limit: 60\nX-RateLimit-Remaining: 42\nX-RateLimit-Reset: 1782567840</code></pre><p>Wanneer u de limiet overschrijdt:</p>\n<pre><code class=\"hljs language-plaintext\">HTTP/1.1 429 Too Many Requests\nX-RateLimit-Limit: 60\nX-RateLimit-Remaining: 0\nRetry-After: 42\nContent-Type: application/json\n\n{\n  &quot;statusCode&quot;: 429,\n  &quot;error&quot;: &quot;Too Many Requests&quot;,\n  &quot;message&quot;: &quot;Rate limit exceeded. Use Authorization header for unlimited access.&quot;\n}</code></pre><h2>Als u een ratelimit raakt</h2>\n<p>Als u een 429 krijgt:</p>\n<ol>\n<li><p><strong>Schakel over naar de Authorization-header</strong> (aanbevolen):</p>\n<pre><code class=\"hljs language-bash\"><span class=\"hljs-comment\"># Niet: ?key=YOUR_MIND_KEY (60/min limiet)</span>\ncurl <span class=\"hljs-string\">&quot;.../memory/recall?key=YOUR_MIND_KEY&quot;</span>\n\n<span class=\"hljs-comment\"># Wel: Authorization-header (onbeperkt)</span>\ncurl -H <span class=\"hljs-string\">&quot;Authorization: Bearer YOUR_MIND_KEY&quot;</span> .../memory/recall</code></pre></li>\n<li><p><strong>Of wacht <code>Retry-After</code> seconden</strong> en probeer opnieuw.</p>\n</li>\n</ol>\n<h2>Waarom de ?key= limiet bestaat</h2>\n<p>De <code>?key=</code>-queryparameter is handig voor URL-only tools (browsers,\n<code>open</code>-commando&#39;s), maar heeft beveiligings- en prestatie-implicaties:</p>\n<ul>\n<li><strong>Beveiliging:</strong> Queryparameters worden gelogd in server-accesslogs, browsergeschiedenis\nen Referer-headers. Beperking van gebruik verkleint de blootstelling.</li>\n<li><strong>Prestaties:</strong> Queryparameter-authenticatie vereist een IP-gebaseerde ratelimiter\n(Redis-lookup per verzoek), wat latency toevoegt. Header-authenticatie slaat dit over.</li>\n<li><strong>Misbruikpreventie:</strong> Een gelekte <code>?key=</code>-URL kan worden gedeeld en gebombardeerd.\nDe IP-limiet beperkt de schade.</li>\n</ul>\n<h2>Aanbevolen patronen</h2>\n<h3>LLM-agents</h3>\n<pre><code class=\"hljs language-python\"><span class=\"hljs-comment\"># Always use header auth</span>\nheaders = {<span class=\"hljs-string\">&quot;Authorization&quot;</span>: <span class=\"hljs-string\">f&quot;Bearer <span class=\"hljs-subst\">{MIND_KEY}</span>&quot;</span>}\nresponse = requests.get(<span class=\"hljs-string\">f&quot;<span class=\"hljs-subst\">{URL}</span>/memory/recall&quot;</span>, headers=headers)</code></pre><h3>Browser-gebaseerde tools</h3>\n<p>Als uw tool alleen URL&#39;s kan openen:</p>\n<pre><code class=\"hljs language-bash\"><span class=\"hljs-comment\"># OK voor incidenteel gebruik (onder 60/min)</span>\nopen <span class=\"hljs-string\">&quot;https://synapse.schaefer.zone/memory/recall?key=YOUR_MIND_KEY&quot;</span>\n\n<span class=\"hljs-comment\"># Voor frequent gebruik, schakel over naar een tool die headers ondersteunt</span>\ncurl -H <span class=\"hljs-string\">&quot;Authorization: Bearer YOUR_MIND_KEY&quot;</span> .../memory/recall</code></pre><h3>MCP-server</h3>\n<p>MCP-servers gebruiken altijd header-authenticatie via de <code>SYNAPSE_MIND_KEY</code>-env-var —\ngeen ratelimit van toepassing.</p>\n<h3>Bulk-imports</h3>\n<p>Voor bulkoperaties (bijv. 1000 herinneringen importeren), gebruik altijd header-authenticatie.\nBulk-imports via <code>?key=</code> raken de ratelimit binnen 1 minuut.</p>\n<h2>Quota (op mind-niveau)</h2>\n<p>Er zijn momenteel geen per-mind quota voor opslaggrootte of aantal herinneringen. Alle\nlimieten zitten op het auth/IP-niveau, niet op dataniveau. Dit kan in de toekomst\nveranderen voor multi-tenant fairshare.</p>\n<h2>Uw gebruik monitoren</h2>\n<pre><code class=\"hljs language-bash\"><span class=\"hljs-comment\"># Controleer uw huidige ratelimit-status (met ?key=-authenticatie)</span>\ncurl -i <span class=\"hljs-string\">&quot;https://synapse.schaefer.zone/memory/stats?key=YOUR_MIND_KEY&quot;</span> | grep -i ratelimit\n\n<span class=\"hljs-comment\"># Output:</span>\n<span class=\"hljs-comment\"># X-RateLimit-Limit: 60</span>\n<span class=\"hljs-comment\"># X-RateLimit-Remaining: 58</span>\n<span class=\"hljs-comment\"># X-RateLimit-Reset: 1782567840</span></code></pre><h2>Volgende stappen</h2>\n<ul>\n<li><a href=\"/docs/getting-started/authentication\">Authenticatie</a></li>\n<li><a href=\"/docs/api/errors\">Fouten &amp; Foutafhandeling</a></li>\n</ul>\n","urls":{"html":"/docs/api/rate-limits","text":"/docs/api/rate-limits?format=text","json":"/docs/api/rate-limits?format=json","llm":"/docs/api/rate-limits?format=llm"},"translations_available":["en","zh","hi","es","fr","ar","pt","ru","ja","de","it","ko","nl","pl","tr","sv","vi","th","id","uk"]}