{"title":"Giới hạn tốc độ & Hạn ngạch","slug":"rate-limits","category":"api","summary":"Chính sách giới hạn tốc độ cho Synapse API — Bearer header (không giới hạn), ?key= (60/phút), endpoint công khai.","audience":["human","llm"],"tags":["api","rate-limits","quotas","throttling"],"difficulty":"beginner","updated":"2026-06-27","word_count":459,"read_minutes":2,"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":"vi","translated":true,"requested_lang":"vi","content_markdown":"\n# Giới hạn tốc độ & Hạn ngạch\n\nSynapse có chính sách giới hạn tốc độ đơn giản, dự đoán được, được thiết kế để\nngăn lạm dụng mà không cản trở sử dụng hợp pháp.\n\n## Chính sách giới hạn tốc độ\n\n| Phương thức xác thực | Giới hạn | Phạm vi |\n|-------------|-------|-------|\n| Mind Key (`Authorization: Bearer`) | **Không** | Mỗi mind |\n| Mind Key (`?key=`) | 60 yêu cầu/phút | Mỗi IP |\n| JWT (`Authorization: Bearer`) | **Không** | Mỗi người dùng |\n| Endpoint công khai | **Không** | Toàn cầu |\n\n> [!TIP]\n> **Luôn sử dụng header `Authorization: Bearer`** khi có thể. Nó không có\n> giới hạn tốc độ. Chỉ dùng `?key=` cho các công cụ không thể đặt header tùy chỉnh.\n\n## Header giới hạn tốc độ\n\nKhi bạn dùng xác thực `?key=`, phản hồi bao gồm header giới hạn tốc độ:\n\n```\nX-RateLimit-Limit: 60\nX-RateLimit-Remaining: 42\nX-RateLimit-Reset: 1782567840\n```\n\nKhi bạn vượt giới hạn:\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## Khi bạn gặp giới hạn tốc độ\n\nNếu bạn nhận 429:\n\n1. **Chuyển sang Authorization header** (khuyến nghị):\n   ```bash\n   # Don't: ?key=YOUR_MIND_KEY (60/min limit)\n   curl \".../memory/recall?key=YOUR_MIND_KEY\"\n   \n   # Do: Authorization header (unlimited)\n   curl -H \"Authorization: Bearer YOUR_MIND_KEY\" .../memory/recall\n   ```\n\n2. **Hoặc đợi `Retry-After` giây** và thử lại.\n\n## Tại sao giới hạn ?key= tồn tại\n\nTham số query `?key=` tiện lợi cho các công cụ chỉ dùng URL (trình duyệt, lệnh\n`open`), nhưng có ý nghĩa bảo mật và hiệu suất:\n\n- **Bảo mật:** Tham số query được ghi trong nhật ký truy cập server, lịch sử\n  trình duyệt, và header Referer. Giới hạn sử dụng làm giảm rủi ro lộ lọt.\n- **Hiệu suất:** Xác thực qua tham số query yêu cầu bộ giới hạn tốc độ dựa trên\n  IP (tra cứu Redis mỗi yêu cầu), điều này làm tăng độ trễ. Xác thực header\n  bỏ qua bước này.\n- **Ngăn lạm dụng:** Một URL `?key=` bị lộ có thể được chia sẻ và truy cập dồn\n  dập. Giới hạn IP giới hạn thiệt hại.\n\n## Mẫu khuyến nghị\n\n### LLM agent\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### Công cụ dựa trên trình duyệt\n\nNếu công cụ của bạn chỉ có thể mở URL:\n\n```bash\n# OK for occasional use (under 60/min)\nopen \"https://synapse.schaefer.zone/memory/recall?key=YOUR_MIND_KEY\"\n\n# For frequent use, switch to a tool that supports headers\ncurl -H \"Authorization: Bearer YOUR_MIND_KEY\" .../memory/recall\n```\n\n### MCP server\n\nMCP server luôn sử dụng xác thực header qua biến môi trường `SYNAPSE_MIND_KEY`\n— không áp dụng giới hạn tốc độ.\n\n### Nhập hàng loạt\n\nĐối với thao tác hàng loạt (ví dụ nhập 1000 bộ nhớ), luôn sử dụng xác thực\nheader. Nhập hàng loạt qua `?key=` sẽ gặp giới hạn tốc độ trong vòng 1 phút.\n\n## Hạn ngạch (cấp Mind)\n\nHiện tại không có hạn ngạch mỗi mind về kích thước lưu trữ hoặc số lượng bộ nhớ.\nTất cả giới hạn đều ở cấp xác thực/IP, không phải cấp dữ liệu. Điều này có thể\nthay đổi trong tương lai để đảm bảo công bằng multi-tenant.\n\n## Giám sát sử dụng\n\n```bash\n# Check your current rate limit status (with ?key= auth)\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## Bước tiếp theo\n\n- [Xác thực](/docs/getting-started/authentication)\n- [Lỗi & Xử lý lỗi](/docs/api/errors)\n","content_html":"<h1>Giới hạn tốc độ &amp; Hạn ngạch</h1>\n<p>Synapse có chính sách giới hạn tốc độ đơn giản, dự đoán được, được thiết kế để\nngăn lạm dụng mà không cản trở sử dụng hợp pháp.</p>\n<h2>Chính sách giới hạn tốc độ</h2>\n<table>\n<thead>\n<tr>\n<th>Phương thức xác thực</th>\n<th>Giới hạn</th>\n<th>Phạm vi</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>Mind Key (<code>Authorization: Bearer</code>)</td>\n<td><strong>Không</strong></td>\n<td>Mỗi mind</td>\n</tr>\n<tr>\n<td>Mind Key (<code>?key=</code>)</td>\n<td>60 yêu cầu/phút</td>\n<td>Mỗi IP</td>\n</tr>\n<tr>\n<td>JWT (<code>Authorization: Bearer</code>)</td>\n<td><strong>Không</strong></td>\n<td>Mỗi người dùng</td>\n</tr>\n<tr>\n<td>Endpoint công khai</td>\n<td><strong>Không</strong></td>\n<td>Toàn cầu</td>\n</tr>\n</tbody></table>\n<div class=\"callout callout-ok\">**Luôn sử dụng header `Authorization: Bearer`** khi có thể. Nó không có\ngiới hạn tốc độ. Chỉ dùng `?key=` cho các công cụ không thể đặt header tùy chỉnh.</div><h2>Header giới hạn tốc độ</h2>\n<p>Khi bạn dùng xác thực <code>?key=</code>, phản hồi bao gồm header giới hạn tốc độ:</p>\n<pre><code class=\"hljs language-plaintext\">X-RateLimit-Limit: 60\nX-RateLimit-Remaining: 42\nX-RateLimit-Reset: 1782567840</code></pre><p>Khi bạn vượt giới hạn:</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>Khi bạn gặp giới hạn tốc độ</h2>\n<p>Nếu bạn nhận 429:</p>\n<ol>\n<li><p><strong>Chuyển sang Authorization header</strong> (khuyến nghị):</p>\n<pre><code class=\"hljs language-bash\"><span class=\"hljs-comment\"># Don&#x27;t: ?key=YOUR_MIND_KEY (60/min limit)</span>\ncurl <span class=\"hljs-string\">&quot;.../memory/recall?key=YOUR_MIND_KEY&quot;</span>\n\n<span class=\"hljs-comment\"># Do: Authorization header (unlimited)</span>\ncurl -H <span class=\"hljs-string\">&quot;Authorization: Bearer YOUR_MIND_KEY&quot;</span> .../memory/recall</code></pre></li>\n<li><p><strong>Hoặc đợi <code>Retry-After</code> giây</strong> và thử lại.</p>\n</li>\n</ol>\n<h2>Tại sao giới hạn ?key= tồn tại</h2>\n<p>Tham số query <code>?key=</code> tiện lợi cho các công cụ chỉ dùng URL (trình duyệt, lệnh\n<code>open</code>), nhưng có ý nghĩa bảo mật và hiệu suất:</p>\n<ul>\n<li><strong>Bảo mật:</strong> Tham số query được ghi trong nhật ký truy cập server, lịch sử\ntrình duyệt, và header Referer. Giới hạn sử dụng làm giảm rủi ro lộ lọt.</li>\n<li><strong>Hiệu suất:</strong> Xác thực qua tham số query yêu cầu bộ giới hạn tốc độ dựa trên\nIP (tra cứu Redis mỗi yêu cầu), điều này làm tăng độ trễ. Xác thực header\nbỏ qua bước này.</li>\n<li><strong>Ngăn lạm dụng:</strong> Một URL <code>?key=</code> bị lộ có thể được chia sẻ và truy cập dồn\ndập. Giới hạn IP giới hạn thiệt hại.</li>\n</ul>\n<h2>Mẫu khuyến nghị</h2>\n<h3>LLM agent</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>Công cụ dựa trên trình duyệt</h3>\n<p>Nếu công cụ của bạn chỉ có thể mở URL:</p>\n<pre><code class=\"hljs language-bash\"><span class=\"hljs-comment\"># OK for occasional use (under 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\"># For frequent use, switch to a tool that supports headers</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 server luôn sử dụng xác thực header qua biến môi trường <code>SYNAPSE_MIND_KEY</code>\n— không áp dụng giới hạn tốc độ.</p>\n<h3>Nhập hàng loạt</h3>\n<p>Đối với thao tác hàng loạt (ví dụ nhập 1000 bộ nhớ), luôn sử dụng xác thực\nheader. Nhập hàng loạt qua <code>?key=</code> sẽ gặp giới hạn tốc độ trong vòng 1 phút.</p>\n<h2>Hạn ngạch (cấp Mind)</h2>\n<p>Hiện tại không có hạn ngạch mỗi mind về kích thước lưu trữ hoặc số lượng bộ nhớ.\nTất cả giới hạn đều ở cấp xác thực/IP, không phải cấp dữ liệu. Điều này có thể\nthay đổi trong tương lai để đảm bảo công bằng multi-tenant.</p>\n<h2>Giám sát sử dụng</h2>\n<pre><code class=\"hljs language-bash\"><span class=\"hljs-comment\"># Check your current rate limit status (with ?key= auth)</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>Bước tiếp theo</h2>\n<ul>\n<li><a href=\"/docs/getting-started/authentication\">Xác thực</a></li>\n<li><a href=\"/docs/api/errors\">Lỗi &amp; Xử lý lỗi</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"]}