Rate Limits e Quotas

As APIs Axon implementam rate limiting para garantir estabilidade e disponibilidade do servico para todos os clientes.

Limites por servico

ServicoSandboxStagingProduction
Vault100/min500/min10.000/min
Synapse50/min200/min5.000/min
Pulse (conexoes)10501.000+
Chain20/min100/min2.000/min

Limites de producao podem ser aumentados mediante contrato. Entre em contato com vendas para limites customizados.

Headers de rate limit

Todas as respostas incluem headers informativos sobre o estado do rate limiting:

X-RateLimit-Limit

Numero maximo de requisicoes permitidas na janela atual.

X-RateLimit-Remaining

Numero de requisicoes restantes na janela atual.

X-RateLimit-Reset

Timestamp Unix de quando a janela sera resetada.

Retry-After

Segundos para aguardar antes de tentar novamente (apenas em respostas 429).

Exemplo de resposta

Response Headershttp
HTTP/1.1 200 OK
Content-Type: application/json
X-RateLimit-Limit: 10000
X-RateLimit-Remaining: 9847
X-RateLimit-Reset: 1699459200

{
  "data": { ... }
}

Tratando rate limits

Quando o limite e atingido, a API retorna status 429 (Too Many Requests):

429 Responsejson
{
  "error": {
    "code": "RATE_LIMIT_EXCEEDED",
    "message": "Rate limit exceeded. Please retry after 42 seconds.",
    "retry_after": 42
  }
}

Implementacao recomendada

Implemente exponential backoff com jitter para retries automaticos. Isso ajuda a distribuir a carga e evitar "thundering herd" quando multiplos clientes atingem o limite simultaneamente.

Exemplo de retry com backoff

retry.jsjavascript
async function requestWithRetry(url, options, maxRetries = 3) {
  for (let attempt = 0; attempt < maxRetries; attempt++) {
    const response = await fetch(url, options);

    if (response.status !== 429) {
      return response;
    }

    const retryAfter = parseInt(response.headers.get('Retry-After') || '1');
    const jitter = Math.random() * 1000;
    const delay = (retryAfter * 1000) + jitter;

    console.log(`Rate limited. Retrying in ${delay}ms...`);
    await new Promise(resolve => setTimeout(resolve, delay));
  }

  throw new Error('Max retries exceeded');
}

Boas praticas

  • Monitore os headers de rate limit em todas as respostas
  • Implemente retry com exponential backoff
  • Use cache para evitar requisicoes desnecessarias
  • Agrupe operacoes em batch quando possivel
  • Configure alertas para quando estiver proximo do limite