{"title":"Límites de frecuencia y cuotas","slug":"rate-limits","category":"api","summary":"Políticas de límites de frecuencia de la API de Synapse — cabecera Bearer (ilimitado), ?key= (60/min), endpoints públicos.","audience":["human","llm"],"tags":["api","rate-limits","quotas","throttling"],"difficulty":"beginner","updated":"2026-06-27","word_count":389,"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":"es","translated":true,"requested_lang":"es","content_markdown":"\n# Límites de frecuencia y cuotas\n\nSynapse tiene una política de límites de frecuencia simple y predecible,\ndiseñada para prevenir el abuso sin estorbar el uso legítimo.\n\n## Política de límites de frecuencia\n\n| Método de auth | Límite | Ámbito |\n|-------------|-------|-------|\n| Mind Key (`Authorization: Bearer`) | **Ninguno** | Por mind |\n| Mind Key (`?key=`) | 60 req/min | Por IP |\n| JWT (`Authorization: Bearer`) | **Ninguno** | Por usuario |\n| Endpoints públicos | **Ninguno** | Global |\n\n> [!TIP]\n> **Use siempre la cabecera `Authorization: Bearer`** cuando sea posible. No\n> tiene límite de frecuencia. Use `?key=` solo para herramientas que no puedan\n> establecer cabeceras personalizadas.\n\n## Cabeceras de límite de frecuencia\n\nCuando use auth con `?key=`, las respuestas incluyen cabeceras de límite:\n\n```\nX-RateLimit-Limit: 60\nX-RateLimit-Remaining: 42\nX-RateLimit-Reset: 1782567840\n```\n\nCuando supere el límite:\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## Cuando alcanza un límite de frecuencia\n\nSi obtiene un 429:\n\n1. **Cambie a la cabecera Authorization** (recomendado):\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. **O espere `Retry-After` segundos** y reintente.\n\n## Por qué existe el límite de ?key=\n\nEl parámetro de consulta `?key=` es conveniente para herramientas que solo usan\nURLs (navegadores, comandos `open`), pero tiene implicaciones de seguridad y\nrendimiento:\n\n- **Seguridad:** Los parámetros de consulta se registran en logs de acceso del\n  servidor, historial del navegador y cabeceras Referer. Limitar su uso reduce\n  la exposición.\n- **Rendimiento:** La auth por parámetro de consulta requiere un limitador de\n  frecuencia basado en IP (búsqueda Redis por petición), lo que añade latencia.\n  La auth por cabecera omite esto.\n- **Prevención de abuso:** Una URL `?key=` filtrada podría compartirse y sufrir\n  bombardeo. El límite por IP contiene el radio de impacto.\n\n## Patrones recomendados\n\n### Agentes 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### Herramientas basadas en navegador\n\nSi su herramienta solo puede abrir URLs:\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### Servidor MCP\n\nLos servidores MCP siempre usan auth por cabecera vía la variable de entorno\n`SYNAPSE_MIND_KEY` — no se aplica ningún límite.\n\n### Importaciones en lote\n\nPara operaciones masivas (p. ej. importar 1000 memorias), use siempre auth por\ncabecera. Las importaciones en lote vía `?key=` alcanzarán el límite en menos\nde 1 minuto.\n\n## Cuotas (a nivel de mind)\n\nActualmente no existen cuotas por mind en cuanto a tamaño de almacenamiento o\ncantidad de memorias. Todos los límites son a nivel de auth/IP, no a nivel de\ndatos. Esto podría cambiar en el futuro para equidad multi-tenant.\n\n## Monitoreo de su uso\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## Próximos pasos\n\n- [Autenticación](/docs/getting-started/authentication)\n- [Errores y manejo de errores](/docs/api/errors)\n","content_html":"<h1>Límites de frecuencia y cuotas</h1>\n<p>Synapse tiene una política de límites de frecuencia simple y predecible,\ndiseñada para prevenir el abuso sin estorbar el uso legítimo.</p>\n<h2>Política de límites de frecuencia</h2>\n<table>\n<thead>\n<tr>\n<th>Método de auth</th>\n<th>Límite</th>\n<th>Ámbito</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>Mind Key (<code>Authorization: Bearer</code>)</td>\n<td><strong>Ninguno</strong></td>\n<td>Por mind</td>\n</tr>\n<tr>\n<td>Mind Key (<code>?key=</code>)</td>\n<td>60 req/min</td>\n<td>Por IP</td>\n</tr>\n<tr>\n<td>JWT (<code>Authorization: Bearer</code>)</td>\n<td><strong>Ninguno</strong></td>\n<td>Por usuario</td>\n</tr>\n<tr>\n<td>Endpoints públicos</td>\n<td><strong>Ninguno</strong></td>\n<td>Global</td>\n</tr>\n</tbody></table>\n<div class=\"callout callout-ok\">**Use siempre la cabecera `Authorization: Bearer`** cuando sea posible. No\ntiene límite de frecuencia. Use `?key=` solo para herramientas que no puedan\nestablecer cabeceras personalizadas.</div><h2>Cabeceras de límite de frecuencia</h2>\n<p>Cuando use auth con <code>?key=</code>, las respuestas incluyen cabeceras de límite:</p>\n<pre><code class=\"hljs language-plaintext\">X-RateLimit-Limit: 60\nX-RateLimit-Remaining: 42\nX-RateLimit-Reset: 1782567840</code></pre><p>Cuando supere el límite:</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>Cuando alcanza un límite de frecuencia</h2>\n<p>Si obtiene un 429:</p>\n<ol>\n<li><p><strong>Cambie a la cabecera Authorization</strong> (recomendado):</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>O espere <code>Retry-After</code> segundos</strong> y reintente.</p>\n</li>\n</ol>\n<h2>Por qué existe el límite de ?key=</h2>\n<p>El parámetro de consulta <code>?key=</code> es conveniente para herramientas que solo usan\nURLs (navegadores, comandos <code>open</code>), pero tiene implicaciones de seguridad y\nrendimiento:</p>\n<ul>\n<li><strong>Seguridad:</strong> Los parámetros de consulta se registran en logs de acceso del\nservidor, historial del navegador y cabeceras Referer. Limitar su uso reduce\nla exposición.</li>\n<li><strong>Rendimiento:</strong> La auth por parámetro de consulta requiere un limitador de\nfrecuencia basado en IP (búsqueda Redis por petición), lo que añade latencia.\nLa auth por cabecera omite esto.</li>\n<li><strong>Prevención de abuso:</strong> Una URL <code>?key=</code> filtrada podría compartirse y sufrir\nbombardeo. El límite por IP contiene el radio de impacto.</li>\n</ul>\n<h2>Patrones recomendados</h2>\n<h3>Agentes 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>Herramientas basadas en navegador</h3>\n<p>Si su herramienta solo puede abrir URLs:</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>Servidor MCP</h3>\n<p>Los servidores MCP siempre usan auth por cabecera vía la variable de entorno\n<code>SYNAPSE_MIND_KEY</code> — no se aplica ningún límite.</p>\n<h3>Importaciones en lote</h3>\n<p>Para operaciones masivas (p. ej. importar 1000 memorias), use siempre auth por\ncabecera. Las importaciones en lote vía <code>?key=</code> alcanzarán el límite en menos\nde 1 minuto.</p>\n<h2>Cuotas (a nivel de mind)</h2>\n<p>Actualmente no existen cuotas por mind en cuanto a tamaño de almacenamiento o\ncantidad de memorias. Todos los límites son a nivel de auth/IP, no a nivel de\ndatos. Esto podría cambiar en el futuro para equidad multi-tenant.</p>\n<h2>Monitoreo de su uso</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>Próximos pasos</h2>\n<ul>\n<li><a href=\"/docs/getting-started/authentication\">Autenticación</a></li>\n<li><a href=\"/docs/api/errors\">Errores y manejo de errores</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"]}