DocsLimites de utilizacao

Limites de taxa

Entenda os limites de taxa da API FreeFileTools e como lidar com eles em sua aplicacao.

Limites do plano gratuito

LimiteValor
Requisicoes por hora50
Tamanho maximo de arquivo por requisicao25 MB
Janela de limite de taxaRolling 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:

json
{
  "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:

CabecalhoDescricao
X-RateLimit-LimitNumero maximo de requisicoes permitidas por hora (50)
X-RateLimit-RemainingNumero de requisicoes restantes na janela atual
Retry-AfterSegundos a esperar antes de tentar novamente (apenas em respostas 429)

Exemplo de cabecalhos de resposta

http
HTTP/1.1 200 OK
Content-Type: image/jpeg
X-RateLimit-Limit: 50
X-RateLimit-Remaining: 42

Dicas para se manter dentro dos limites

1.

Verifique as requisicoes restantes

Monitore o cabecalho X-RateLimit-Remaining para saber quantas requisicoes voce ainda tem.

2.

Implemente recuo exponencial

Quando receber uma resposta 429, espere e tente novamente com atrasos crescentes em vez de bombardear a API.

3.

Armazene resultados em cache

Se voce esta processando os mesmos arquivos repetidamente, armazene os resultados em cache localmente para evitar chamadas desnecessarias a API.

4.

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

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");
}