Rate Limits
A API do FlowMail aplica limites de requisição por segundo para garantir estabilidade e desempenho para todos os usuários. Os limites variam de acordo com o plano contratado.
Limites por Plano
Cada plano possui um limite de requisições por segundo (req/s). Esse limite se aplica a todas as chamadas de API combinadas.
| Plano | Limite (req/s) | Cota Mensal | Burst Máximo |
|---|---|---|---|
| Free | 2 req/s | 500 verificações | 5 requisições |
| Starter | 10 req/s | 10.000 verificações | 20 requisições |
| Pro | 30 req/s | 100.000 verificações | 60 requisições |
| Enterprise | 100 req/s | Personalizada | 200 requisições |
Headers de Resposta
Todas as respostas da API incluem headers que informam o status atual dos seus limites. Use esses headers para monitorar o consumo e evitar bloqueios.
| Header | Tipo | Descrição |
|---|---|---|
X-RateLimit-Limit |
integer | Número máximo de requisições por segundo permitidas no seu plano |
X-RateLimit-Remaining |
integer | Número de requisições restantes na janela atual |
X-RateLimit-Reset |
timestamp | Timestamp Unix (em segundos) de quando a janela atual reseta |
HTTP/1.1 200 OK
Content-Type: application/json
X-RateLimit-Limit: 30
X-RateLimit-Remaining: 27
X-RateLimit-Reset: 1709398800
Resposta 429 Too Many Requests
Quando o limite de requisições é excedido, a API retorna o status
429 Too Many Requests
com o header Retry-After indicando quantos segundos aguardar.
HTTP/1.1 429 Too Many Requests
Content-Type: application/json
Retry-After: 1
X-RateLimit-Limit: 30
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1709398800
{
"error": "rate_limit_exceeded",
"message": "Limite de requisições excedido. Tente novamente em 1 segundo.",
"retry_after": 1
}
Boas Práticas
Implemente backoff exponencial
Ao receber um 429, aguarde o tempo indicado no header
Retry-After.
Se continuar recebendo erros, dobre o tempo de espera a cada tentativa.
Use cache de resultados
Os resultados de verificação de e-mail raramente mudam em curto prazo. Armazene os resultados em cache por pelo menos 24 horas para evitar verificações duplicadas e economizar sua cota.
Prefira verificação em lote
Para grandes volumes, use o endpoint de verificação em lote
(POST /api/v1/verify/batch)
ao invés de múltiplas chamadas individuais. Uma única chamada em lote com 100 e-mails
conta como 1 requisição para o rate limit.
Monitore os headers
Verifique os headers X-RateLimit-Remaining
em cada resposta e reduza a velocidade das chamadas quando o valor estiver baixo.
function verifyWithRetry(string $email, int $maxRetries = 3): array
{
$attempt = 0;
while ($attempt < $maxRetries) {
$response = Http::withToken($apiKey)
->get("https://mail.flowsales.online/api/v1/verify/{$email}");
if ($response->status() !== 429) {
return $response->json();
}
$retryAfter = (int) $response->header('Retry-After', 1);
$waitTime = $retryAfter * pow(2, $attempt);
sleep($waitTime);
$attempt++;
}
throw new RateLimitException('Limite de tentativas excedido.');
}