DocsapiEndpoints de leitura (
Endpoints de escrita (
Endpoint de chat (
Rate Limits
Limites de requisições por plano, headers de controle e estratégias para lidar com 429.
A API Simple Agent usa rate limiting por chave de API, com limites diferentes por tipo de endpoint e plano.
Limites por plano
Endpoints de leitura (GET)
| Plano | Requisições/min | Requisições/dia |
|---|---|---|
| Starter | 60 | 2.000 |
| Growth | 300 | 20.000 |
| Agency | 1.000 | Ilimitado |
Endpoints de escrita (POST, PUT, DELETE)
| Plano | Requisições/min | Requisições/dia |
|---|---|---|
| Starter | 20 | 500 |
| Growth | 100 | 5.000 |
| Agency | 500 | Ilimitado |
Endpoint de chat (POST /v1/chat)
O endpoint de chat tem limites separados baseados em mensagens processadas:
| Plano | Mensagens/mês |
|---|---|
| Starter | 2.000 |
| Growth | 20.000 |
| Agency | 100.000+ (veja plano) |
Headers de rate limit
Toda resposta da API inclui headers com o status atual do seu limite:
X-RateLimit-Limit: 300
X-RateLimit-Remaining: 247
X-RateLimit-Reset: 1715686800
X-RateLimit-Policy: sliding-window-60s
| Header | Descrição |
|---|---|
X-RateLimit-Limit |
Limite total na janela atual |
X-RateLimit-Remaining |
Requisições restantes |
X-RateLimit-Reset |
Unix timestamp quando o limite reinicia |
X-RateLimit-Policy |
Algoritmo: sliding-window-60s ou token-bucket |
Resposta quando o limite é atingido
HTTP 429 Too Many Requests:
{
"error": {
"code": "rate_limit_exceeded",
"message": "Rate limit exceeded. Try again in 18 seconds.",
"retry_after": 18,
"reset_at": "2026-05-14T10:30:18Z"
}
}
Como lidar com 429
Retry com backoff exponencial
import time
import requests
def call_with_retry(url, headers, payload, max_retries=3):
for attempt in range(max_retries):
response = requests.post(url, headers=headers, json=payload)
if response.status_code == 429:
retry_after = int(response.json()["error"]["retry_after"])
wait = retry_after * (2 ** attempt) # backoff exponencial
print(f"Rate limited. Aguardando {wait}s...")
time.sleep(wait)
continue
return response
raise Exception("Max retries exceeded")
async function callWithRetry(url: string, options: RequestInit, maxRetries = 3) {
for (let attempt = 0; attempt < maxRetries; attempt++) {
const res = await fetch(url, options);
if (res.status === 429) {
const data = await res.json();
const wait = data.error.retry_after * Math.pow(2, attempt);
await new Promise(r => setTimeout(r, wait * 1000));
continue;
}
return res;
}
throw new Error("Max retries exceeded");
}
Checar o header antes de fazer a requisição
const remaining = parseInt(response.headers.get("X-RateLimit-Remaining") ?? "0");
const resetAt = parseInt(response.headers.get("X-RateLimit-Reset") ?? "0");
if (remaining < 5) {
const waitMs = (resetAt - Date.now() / 1000) * 1000;
await new Promise(r => setTimeout(r, waitMs));
}
Limites por IP (proteção de abuso)
Além dos limites por API key, o Simple Agent bloqueia IPs com comportamento anômalo:
- Mais de 1.000 requisições/min de um único IP → bloqueio temporário de 5 minutos
- Padrão de scraping detectado → bloqueio de 24h com notificação por email
Aumentar limites
Para limites acima do plano Agency padrão (ex: alto volume de mensagens em produto), entre em contato em suporte@simple-agent.me com:
- Volume estimado de mensagens/mês
- Caso de uso
- Janela de tempo do pico de uso