Pular para o conteúdo principal

Rate Limiting

Quick Reference

WhatPolítica de rate limiting da API A55 e estratégias de retry
WhyEvite interrupções de serviço durante períodos de alto tráfego
Reading Time7 min
DifficultyIntermediate
PrerequisitesIntegração com a API funcional

Política

ParâmetroValor
Rate limit100 requisições por minuto por chave de API
JanelaJanela deslizante de 60 segundos
EscopoPor client_id em todos os endpoints
Resposta ao atingir o limiteHTTP 429 Too Many Requests

Headers de Rate Limit

Toda resposta da API inclui headers de rate limit:

HTTP/1.1 200 OK
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 73
X-RateLimit-Reset: 1711036800
Content-Type: application/json
HeaderDescrição
X-RateLimit-LimitMáximo de requisições permitidas por janela
X-RateLimit-RemainingRequisições restantes na janela atual
X-RateLimit-ResetTimestamp Unix de quando a janela é reiniciada

Resposta HTTP 429

Quando você excede o limite:

{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Too many requests. Retry after 23 seconds.",
"details": [
{
"field": "rate_limit",
"reason": "100 requests per minute exceeded"
}
]
},
"request_id": "req_abc123..."
}

O header Retry-After indica quantos segundos esperar:

HTTP/1.1 429 Too Many Requests
Retry-After: 23
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1711036823

Estratégia de Retry com Backoff Exponencial

#!/bin/bash
MAX_RETRIES=3
RETRY_DELAY=1

for i in $(seq 1 $MAX_RETRIES); do
RESPONSE=$(curl -s -w "\n%{http_code}" \
-X POST "https://sandbox.api.a55.tech/api/v1/bank/wallet/charge/" \
-H "Authorization: Bearer ${A55_ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"amount": "100.00", "currency": "BRL"}')

HTTP_CODE=$(echo "$RESPONSE" | tail -1)
BODY=$(echo "$RESPONSE" | head -n -1)

if [ "$HTTP_CODE" -ne 429 ] && [ "$HTTP_CODE" -lt 500 ]; then
echo "$BODY"
exit 0
fi

echo "Attempt $i failed (HTTP $HTTP_CODE). Retrying in ${RETRY_DELAY}s..."
sleep $RETRY_DELAY
RETRY_DELAY=$((RETRY_DELAY * 2))
done

echo "All retries exhausted"
exit 1

Boas Práticas

  1. Leia os headers de rate limit — Monitore X-RateLimit-Remaining e desacelere antes de chegar a zero
  2. Nunca retente erros 4xx (exceto 429) — Erros do cliente indicam um bug na sua requisição, não uma falha transitória
  3. Adicione jitter ao backoff — Evita o efeito de manada quando múltiplos clientes retentam simultaneamente
  4. Use uma fila de requisições — Suavize picos de tráfego enfileirando requisições e drenando a uma taxa controlada
  5. Use cache quando possível — Faça cache de respostas GET (detalhes do wallet, status da cobrança) para reduzir o volume de requisições
  6. Agrupe operações — Se você precisa criar muitas cobranças, distribua-as ao longo da janela em vez de enviar todas de uma vez