Limites de taxa
Entenda os limites de taxa da API FreeFileTools e como lidar com eles em sua aplicacao.
Limites do plano gratuito
| Limite | Valor |
|---|---|
| Requisicoes por hora | 50 |
| Tamanho maximo de arquivo por requisicao | 25 MB |
| Janela de limite de taxa | Rolling 1 hour |
O limite de taxa e aplicado por API key. Cada chave tem seu proprio contador independente que e reiniciado em uma base horaria continua.
Quando os limites de taxa sao excedidos
Quando voce excede o limite de taxa, a API retorna uma resposta 429 Too Many Requests:
{
"error": "Rate limit exceeded",
"message": "You have exceeded the rate limit of 50 requests per hour. Please try again later.",
"retryAfter": 1742
}O campo retryAfter indica o numero de segundos a esperar antes de fazer outra requisicao.
Cabecalhos de resposta de limite de taxa
Cada resposta da API inclui cabecalhos para ajuda-lo a rastrear seu uso do limite de taxa:
| Cabecalho | Descricao |
|---|---|
X-RateLimit-Limit | Numero maximo de requisicoes permitidas por hora (50) |
X-RateLimit-Remaining | Numero de requisicoes restantes na janela atual |
Retry-After | Segundos a esperar antes de tentar novamente (apenas em respostas 429) |
Exemplo de cabecalhos de resposta
HTTP/1.1 200 OK
Content-Type: image/jpeg
X-RateLimit-Limit: 50
X-RateLimit-Remaining: 42Dicas para se manter dentro dos limites
Verifique as requisicoes restantes
Monitore o cabecalho X-RateLimit-Remaining para saber quantas requisicoes voce ainda tem.
Implemente recuo exponencial
Quando receber uma resposta 429, espere e tente novamente com atrasos crescentes em vez de bombardear a API.
Armazene resultados em cache
Se voce esta processando os mesmos arquivos repetidamente, armazene os resultados em cache localmente para evitar chamadas desnecessarias a API.
Agrupe com sabedoria
Para processamento em lote, espacie suas requisicoes ao longo do tempo em vez de enviar todas de uma vez.
Exemplo: Lidando com limites de taxa em JavaScript
async function apiCall(url, options, maxRetries = 3) {
for (let attempt = 0; attempt < maxRetries; attempt++) {
const response = await fetch(url, options);
if (response.status === 429) {
const retryAfter = parseInt(response.headers.get("Retry-After") || "60");
console.log(`Rate limited. Waiting ${retryAfter} seconds...`);
await new Promise((resolve) => setTimeout(resolve, retryAfter * 1000));
continue;
}
return response;
}
throw new Error("Max retries exceeded");
}