Rate Limits
Cada API key possui um limite de requisições por minuto para garantir a estabilidade da plataforma.
Limite padrão
- 100 requisições por minuto por API key (configurável na criação da key)
- A contagem é avaliada em janelas de 60 segundos
Headers de rate limit
Toda resposta inclui headers informativos sobre o consumo atual:
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 87
X-RateLimit-Reset: 1718825460| Header | Descrição |
|---|---|
X-RateLimit-Limit | Limite total por janela |
X-RateLimit-Remaining | Requisições restantes na janela atual |
X-RateLimit-Reset | Timestamp Unix (segundos) quando a janela reseta |
Quando o limite é excedido
Resposta 429 Too Many Requests:
{
"error": {
"code": "RATE_LIMITED",
"message": "Limite de 100 requisições por minuto excedido para esta API key."
}
}Headers adicionais:
HTTP/1.1 429 Too Many Requests
Retry-After: 60
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1718825460Retry-After indica quantos segundos aguardar antes de tentar novamente.
Configuração personalizada
Ao criar uma API key, o administrador pode definir um rateLimitPerMinute diferente (ex: 200, 500). Keys com alto volume podem ter limites maiores — entre em contato com o suporte.
Boas práticas
- Respeite
Retry-After: Quando receber429, aguarde o tempo indicado antes de tentar novamente. - Implemente backoff exponencial: Em caso de múltiplos
429, aumente progressivamente o intervalo entre retentativas. - Batch operações: Prefira criar múltiplos registros via batch (quando disponível) em vez de loops individuais.
- Cache do lado do cliente: Dados que mudam raramente (séries, turmas) podem ser cacheados localmente.
- Monitore
X-RateLimit-Remaining: Ajuste seu ritmo de requisições antes de atingir o limite.
Exemplo de backoff
async function callWithRetry (url, options, maxRetries = 3) {
for (let attempt = 0; attempt <= maxRetries; attempt++) {
const res = await fetch(url, options)
if (res.status === 429) {
if (attempt === maxRetries) throw new Error('Rate limit excedido após retentativas')
const retryAfter = parseInt(res.headers.get('Retry-After') || '60', 10)
await sleep(retryAfter * 1000)
continue
}
return res
}
}Updated about 21 hours ago
Did this page help you?
