Pular para o conteúdo

Rate Limits

Entenda os limites de requisicao e estrategias para uso eficiente da API.

Visao Geral

As APIs NooviChat e NooviFlow aplicam limites de requisicao (rate limiting) para garantir estabilidade e disponibilidade para todos os usuarios. Quando o limite e excedido, a API retorna status 429 Too Many Requests.

Headers de Resposta

Cada resposta inclui headers que informam o estado atual do rate limit:

HeaderDescricao
X-RateLimit-LimitNumero maximo de requisicoes no periodo
X-RateLimit-RemainingRequisicoes restantes no periodo atual
X-RateLimit-ResetTimestamp UNIX de quando o limite sera resetado
Retry-AfterSegundos para aguardar antes de tentar novamente (somente no 429)

NooviChat — Limites

EndpointLimiteEscopo
Geral300 req/minPor token
Mensagens (envio)100 req/minPor inbox
Busca de contatos60 req/minPor conta
Platform API60 req/minPor app

NooviFlow — Limites

EndpointLimiteEscopo
Geral200 req/minPor token
Relatorios30 req/minPor usuario
Importacao em lote10 req/minPor conta
Auth (login)10 req/minPor IP

Tratando Erro 429

Quando receber um erro 429, use backoff exponencial para retentar a requisicao:

async function fetchWithRetry(url, options, maxRetries = 3) {
  for (let attempt = 0; attempt < maxRetries; attempt++) {
    const response = await fetch(url, options);

    if (response.status !== 429) {
      return response;
    }

    // Usar header Retry-After ou backoff exponencial
    const retryAfter = response.headers.get("Retry-After");
    const delay = retryAfter
      ? parseInt(retryAfter) * 1000
      : Math.pow(2, attempt) * 1000;

    console.log(`Rate limited. Aguardando ${delay}ms...`);
    await new Promise((resolve) => setTimeout(resolve, delay));
  }

  throw new Error("Max retries exceeded");
}

Boas Praticas

  • Monitore os headers X-RateLimit-Remaining para evitar atingir o limite
  • Use backoff exponencial com jitter aleatorio para retries
  • Agrupe operacoes em lote quando possivel (ex: criar multiplos contatos de uma vez)
  • Implemente cache local para dados que nao mudam frequentemente
  • Use webhooks em vez de polling para receber atualizacoes em tempo real
  • Entre em contato caso precise de limites maiores para seu caso de uso