Rate Limits e Quotas
As APIs Axon implementam rate limiting para garantir estabilidade e disponibilidade do servico para todos os clientes.
Limites por servico
| Servico | Sandbox | Staging | Production |
|---|---|---|---|
| Vault | 100/min | 500/min | 10.000/min |
| Synapse | 50/min | 200/min | 5.000/min |
| Pulse (conexoes) | 10 | 50 | 1.000+ |
| Chain | 20/min | 100/min | 2.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-LimitNumero maximo de requisicoes permitidas na janela atual.
X-RateLimit-RemainingNumero de requisicoes restantes na janela atual.
X-RateLimit-ResetTimestamp Unix de quando a janela sera resetada.
Retry-AfterSegundos 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