Skip to main content

Visão Geral

O EnviaAI aplica limites de requisições (rate limits) para garantir estabilidade e disponibilidade para todos os usuários. Os limites variam por plano e endpoint.

Limites por Plano

EndpointLimiteJanela
Mensagens100 reqpor minuto
Instâncias50 reqpor minuto
Webhooks100 reqpor minuto
Geral500 reqpor minuto

Headers de Rate Limit

Toda resposta inclui headers informativos:
X-RateLimit-Limit: 2000
X-RateLimit-Remaining: 1995
X-RateLimit-Reset: 1706961600
HeaderDescrição
X-RateLimit-LimitTotal de requisições permitidas na janela
X-RateLimit-RemainingRequisições restantes na janela atual
X-RateLimit-ResetTimestamp Unix quando a janela reseta

Resposta 429

Quando você excede o limite, recebe:
{
  "success": false,
  "error": {
    "code": "rate_limit_exceeded",
    "message": "Rate limit exceeded. Please retry after 60 seconds.",
    "retryAfter": 60
  }
}
O header Retry-After indica quantos segundos esperar:
HTTP/1.1 429 Too Many Requests
Retry-After: 60

Implementando Retry

Exponential Backoff

async function sendWithRetry(request, maxRetries = 3) {
  for (let i = 0; i < maxRetries; i++) {
    try {
      return await client.messages.send(request);
    } catch (error) {
      if (error.code === 'rate_limit_exceeded') {
        const delay = error.retryAfter || Math.pow(2, i) * 1000;
        console.log(`Rate limited. Waiting ${delay}ms...`);
        await sleep(delay);
      } else {
        throw error;
      }
    }
  }
  throw new Error('Max retries exceeded');
}

Queue com Rate Limiting

const Bottleneck = require('bottleneck');

const limiter = new Bottleneck({
  reservoir: 100,        // Requisições iniciais
  reservoirRefreshAmount: 100,
  reservoirRefreshInterval: 60 * 1000, // Refresh a cada minuto
  maxConcurrent: 10,     // Máximo paralelo
  minTime: 100           // Mínimo entre requisições (ms)
});

// Usar o limiter
const result = await limiter.schedule(() =>
  client.messages.send(request)
);

Bulk Operations

Para enviar muitas mensagens, use batch com controle de rate:
async function sendBulk(messages, ratePerMinute = 100) {
  const delay = 60000 / ratePerMinute; // ms entre cada mensagem

  for (const msg of messages) {
    await client.messages.send(msg);
    await sleep(delay);
  }
}

Monitoramento

Dashboard

Monitore uso em tempo real no Developer Portal

Alertas

Configure alertas quando atingir 80% do limite

Boas Práticas

Sempre verifique X-RateLimit-Remaining antes de enviar em massa.
Use exponential backoff com jitter para evitar thundering herd.
Para alto volume, use filas (Bull, RabbitMQ) com rate limiting.
Cache respostas de endpoints de leitura (list, get) quando fizer sentido.
Se atingir limites frequentemente, considere upgrade de plano.

Limites Especiais

Mensagens por Número

Além do rate limit da API, o WhatsApp tem limites próprios:
TierLimite/24hComo aumentar
Tier 11.000Verificação de negócio
Tier 210.000Bom quality rating
Tier 3100.000Excelente quality rating
Tier 4IlimitadoEnterprise
Estes limites do WhatsApp se aplicam apenas à API Oficial (Meta).

Precisa de Mais?

Enterprise

Para limites customizados, fale com nosso time comercial.