Simple Agent
Docsapi

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

Erros da API → · Autenticação → · Webhooks →