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:
| Header | Descricao |
|---|---|
X-RateLimit-Limit | Numero maximo de requisicoes no periodo |
X-RateLimit-Remaining | Requisicoes restantes no periodo atual |
X-RateLimit-Reset | Timestamp UNIX de quando o limite sera resetado |
Retry-After | Segundos para aguardar antes de tentar novamente (somente no 429) |
NooviChat — Limites
| Endpoint | Limite | Escopo |
|---|---|---|
| Geral | 300 req/min | Por token |
| Mensagens (envio) | 100 req/min | Por inbox |
| Busca de contatos | 60 req/min | Por conta |
| Platform API | 60 req/min | Por app |
NooviFlow — Limites
| Endpoint | Limite | Escopo |
|---|---|---|
| Geral | 200 req/min | Por token |
| Relatorios | 30 req/min | Por usuario |
| Importacao em lote | 10 req/min | Por conta |
| Auth (login) | 10 req/min | Por 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