Rate limiting
Token bucket por chave (120 req/min default), 429 RATE_LIMITED com Retry-After, backoff recomendado e teto global por IP.
Cada chave tem um token bucket próprio. O default é 120 requisições por minuto, com reposição contínua — não é janela fixa; os tokens voltam proporcionalmente ao tempo decorrido.
- O limite é configurável por chave na emissão. Se seu volume legítimo passa de 120/min, combine um limite maior com a OnmIA.
- Estouro retorna
429 RATE_LIMITEDcom o headerRetry-Afterem segundos (inteiro, mínimo 1). Respeite-o.
Teto global por IP
Além do limite por chave, existe um limitador global de infraestrutura de 300 req/min por IP de origem. Se você concentra várias integrações atrás do mesmo IP de saída, considere esse teto agregado.
Cliente recomendado
Ao receber 429, aplique backoff exponencial com jitter e respeite o
Retry-After:
ao receber 429:
aguardar max(Retry-After, backoff_atual)
backoff_atual = min(backoff_atual * 2, 60s) + jitter aleatorio (0-1s)
ao receber 2xx:
backoff_atual = 1sExemplo em JavaScript:
let backoff = 1000 // ms
async function withRateLimit(doRequest) {
while (true) {
const res = await doRequest()
if (res.status !== 429) {
backoff = 1000
return res
}
const retryAfter = Number(res.headers.get('Retry-After') ?? 1) * 1000
const jitter = Math.random() * 1000
await sleep(Math.max(retryAfter, backoff) + jitter)
backoff = Math.min(backoff * 2, 60000)
}
}Nunca faça retry em loop apertado
Retry imediato sem espera só consome o próprio orçamento de requisições e
prolonga o 429. Sempre aguarde antes de reenviar.