{"title":"Лимиты запросов и квоты","slug":"rate-limits","category":"api","summary":"Политика лимитов запросов для Synapse API — заголовок Bearer (без лимита), ?key= (60/мин), публичные эндпоинты.","audience":["human","llm"],"tags":["api","rate-limits","quotas","throttling"],"difficulty":"beginner","updated":"2026-06-27","word_count":309,"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":"ru","translated":true,"requested_lang":"ru","content_markdown":"\n# Лимиты запросов и квоты\n\nВ Synapse применяется простая и предсказуемая политика лимитов запросов,\nкоторая предотвращает злоупотребления, не мешая легитимному использованию.\n\n## Политика лимитов запросов\n\n| Способ аутентификации | Лимит | Область |\n|-------------|-------|-------|\n| Mind Key (`Authorization: Bearer`) | **Нет** | На mind |\n| Mind Key (`?key=`) | 60 запросов/мин | На IP |\n| JWT (`Authorization: Bearer`) | **Нет** | На пользователя |\n| Публичные эндпоинты | **Нет** | Глобально |\n\n> [!TIP]\n> **Всегда используйте заголовок `Authorization: Bearer`**, когда это возможно.\n> Он не имеет лимита. Используйте `?key=` только для инструментов, которые не\n> могут устанавливать пользовательские заголовки.\n\n## Заголовки лимитов запросов\n\nПри использовании аутентификации `?key=` ответы содержат заголовки лимита:\n\n```\nX-RateLimit-Limit: 60\nX-RateLimit-Remaining: 42\nX-RateLimit-Reset: 1782567840\n```\n\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## Если вы превысили лимит\n\nПри получении 429:\n\n1. **Перейдите на заголовок Authorization** (рекомендуется):\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. **Или подождите `Retry-After` секунд** и повторите запрос.\n\n## Почему для `?key=` существует лимит\n\nQuery-параметр `?key=` удобен для инструментов, работающих только с URL (браузеры,\nкоманда `open`), но имеет последствия для безопасности и производительности:\n\n- **Безопасность:** Query-параметры попадают в журналы доступа сервера, историю\n  браузера и заголовки Referer. Ограничение использования снижает риски.\n- **Производительность:** Аутентификация через query-параметр требует лимитера\n  по IP (Redis-запрос на каждый запрос), что добавляет задержку. Header-auth\n  обходит это.\n- **Предотвращение злоупотреблений:** Утёкший URL с `?key=` могут расшарить и\n  закидать запросами. Лимит по IP ограничивает масштаб ущерба.\n\n## Рекомендуемые паттерны\n\n### LLM-агенты\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### Браузерные инструменты\n\nЕсли ваш инструмент может только открывать 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-сервер\n\nMCP-серверы всегда используют header-auth через переменную окружения\n`SYNAPSE_MIND_KEY` — лимит не применяется.\n\n### Массовый импорт\n\nДля массовых операций (например, импорт 1000 воспоминаний) всегда используйте\nheader-auth. Массовый импорт через `?key=` упрётся в лимит менее чем за минуту.\n\n## Квоты (на уровне mind)\n\nВ настоящее время квоты на размер хранилища или количество воспоминаний на mind\nотсутствуют. Все лимиты применяются на уровне аутентификации/IP, а не данных.\nЭто может измениться в будущем для обеспечения справедливости в multi-tenant-среде.\n\n## Мониторинг использования\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## Следующие шаги\n\n- [Аутентификация](/docs/getting-started/authentication)\n- [Ошибки и обработка ошибок](/docs/api/errors)\n","content_html":"<h1>Лимиты запросов и квоты</h1>\n<p>В Synapse применяется простая и предсказуемая политика лимитов запросов,\nкоторая предотвращает злоупотребления, не мешая легитимному использованию.</p>\n<h2>Политика лимитов запросов</h2>\n<table>\n<thead>\n<tr>\n<th>Способ аутентификации</th>\n<th>Лимит</th>\n<th>Область</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>Mind Key (<code>Authorization: Bearer</code>)</td>\n<td><strong>Нет</strong></td>\n<td>На mind</td>\n</tr>\n<tr>\n<td>Mind Key (<code>?key=</code>)</td>\n<td>60 запросов/мин</td>\n<td>На IP</td>\n</tr>\n<tr>\n<td>JWT (<code>Authorization: Bearer</code>)</td>\n<td><strong>Нет</strong></td>\n<td>На пользователя</td>\n</tr>\n<tr>\n<td>Публичные эндпоинты</td>\n<td><strong>Нет</strong></td>\n<td>Глобально</td>\n</tr>\n</tbody></table>\n<div class=\"callout callout-ok\">**Всегда используйте заголовок `Authorization: Bearer`**, когда это возможно.\nОн не имеет лимита. Используйте `?key=` только для инструментов, которые не\nмогут устанавливать пользовательские заголовки.</div><h2>Заголовки лимитов запросов</h2>\n<p>При использовании аутентификации <code>?key=</code> ответы содержат заголовки лимита:</p>\n<pre><code class=\"hljs language-plaintext\">X-RateLimit-Limit: 60\nX-RateLimit-Remaining: 42\nX-RateLimit-Reset: 1782567840</code></pre><p>При превышении лимита:</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>Если вы превысили лимит</h2>\n<p>При получении 429:</p>\n<ol>\n<li><p><strong>Перейдите на заголовок Authorization</strong> (рекомендуется):</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>Или подождите <code>Retry-After</code> секунд</strong> и повторите запрос.</p>\n</li>\n</ol>\n<h2>Почему для <code>?key=</code> существует лимит</h2>\n<p>Query-параметр <code>?key=</code> удобен для инструментов, работающих только с URL (браузеры,\nкоманда <code>open</code>), но имеет последствия для безопасности и производительности:</p>\n<ul>\n<li><strong>Безопасность:</strong> Query-параметры попадают в журналы доступа сервера, историю\nбраузера и заголовки Referer. Ограничение использования снижает риски.</li>\n<li><strong>Производительность:</strong> Аутентификация через query-параметр требует лимитера\nпо IP (Redis-запрос на каждый запрос), что добавляет задержку. Header-auth\nобходит это.</li>\n<li><strong>Предотвращение злоупотреблений:</strong> Утёкший URL с <code>?key=</code> могут расшарить и\nзакидать запросами. Лимит по IP ограничивает масштаб ущерба.</li>\n</ul>\n<h2>Рекомендуемые паттерны</h2>\n<h3>LLM-агенты</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>Браузерные инструменты</h3>\n<p>Если ваш инструмент может только открывать 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-сервер</h3>\n<p>MCP-серверы всегда используют header-auth через переменную окружения\n<code>SYNAPSE_MIND_KEY</code> — лимит не применяется.</p>\n<h3>Массовый импорт</h3>\n<p>Для массовых операций (например, импорт 1000 воспоминаний) всегда используйте\nheader-auth. Массовый импорт через <code>?key=</code> упрётся в лимит менее чем за минуту.</p>\n<h2>Квоты (на уровне mind)</h2>\n<p>В настоящее время квоты на размер хранилища или количество воспоминаний на mind\nотсутствуют. Все лимиты применяются на уровне аутентификации/IP, а не данных.\nЭто может измениться в будущем для обеспечения справедливости в multi-tenant-среде.</p>\n<h2>Мониторинг использования</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>Следующие шаги</h2>\n<ul>\n<li><a href=\"/docs/getting-started/authentication\">Аутентификация</a></li>\n<li><a href=\"/docs/api/errors\">Ошибки и обработка ошибок</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"]}