Limites de uso

Cada plano tem dois limites independentes: uma cota de requisições por período de cobrança e um limite por minuto (burst). O período reinicia a cada renovação da assinatura.

Limites por plano

Plano Requisições/período Limite por minuto
Básico 1.000 10 req/min
Pro 10.000 30 req/min
Ultra 30.000 60 req/min
Turbo 100.000 90 req/min
Mega 300.000 120 req/min

A cota conta apenas requisições cobradas — veja Cobrança de requisições. Pacotes de requisições e créditos extras concedidos aumentam a cota do período atual; eles expiram quando esse período termina e não passam para a renovação ou para um plano ativado imediatamente. O limite por minuto conta tentativas e não aumenta com créditos extras. Enquanto houver créditos extras, as chamadas cobradas usam esse saldo primeiro; a cota própria do plano começa a ser consumida depois. Tentativas rejeitadas também podem contar para o limite por minuto.

Headers de limite

Depois que a chave e o plano são identificados, a resposta informa o estado das políticas do plano:

RateLimit-Policy: "burst";q=30;w=60, "quota";q=5000;w=2592000
RateLimit: "burst";r=27;t=41, "quota";r=4318;t=1209600
RateLimit-Limit: 30
RateLimit-Remaining: 27
RateLimit-Reset: 41
Campo Significado
q Limite configurado da política
w Janela da política, em segundos
r Quanto ainda resta
t Segundos até reiniciar

RateLimit-Limit, -Remaining e -Reset repetem a política burst no formato antigo, para clientes que não interpretam campos estruturados. Algumas respostas de erro não trazem esses headers. Em caso de 429, siga o Retry-After. Se um erro ocorrer antes da verificação da cota, os headers podem mostrar apenas o limite por minuto.

O valor q da política quota já inclui os créditos extras disponíveis no período. A contabilização interna desses créditos não reduz esse teto; somente novas requisições cobradas reduzem r.

Planos com cota ilimitada omitem a política quota. A política burst continua sendo aplicada normalmente. Créditos extras continuam sendo consumidos primeiro; depois que acabam, as chamadas seguem pelo plano ilimitado.

Quando o limite é atingido

Status code O que fazer
429 rate_limit_exceeded Aguarde o Retry-After (em segundos) e repita
429 quota_exceeded Faça upgrade do plano ou aguarde a renovação do período

Nenhuma das duas consome cota.

Limites de transporte

As rotas públicas atuais aceitam apenas GET, sem corpo. O gateway recusa com 413 payload_too_large qualquer corpo declarado acima de 1 MiB (1.048.576 bytes) e também corpos transmitidos sem um tamanho confiável.

Respostas da transportadora são lidas com limite de 1 MiB depois da descompressão. Uma resposta maior, um redirecionamento inesperado ou uma falha de leitura vira 502 courier_unavailable, não consome cota e nunca é repassada parcialmente. O tempo limite continua valendo até o fim do corpo.

Respeitando os headers

Melhor do que reagir ao 429 é nunca chegar nele:

async function track(code, key) {
  const res = await fetch(`https://api.pacotevicio.dev/v1/track/${code}`, {
    headers: { "X-API-Key": key },
  });

  if (res.status === 429) {
    const wait = Number(res.headers.get("Retry-After") ?? 1);
    await new Promise((r) => setTimeout(r, wait * 1000));
    return track(code, key);
  }

  // Desacelere antes de bater no limite.
  const remaining = Number(res.headers.get("RateLimit-Remaining") ?? Infinity);
  if (remaining <= 2) {
    const reset = Number(res.headers.get("RateLimit-Reset") ?? 1);
    await new Promise((r) => setTimeout(r, reset * 1000));
  }

  return res;
}

Aumentar seus limites

Acesse Plano e Cobrança no menu do portal.