api-rate-limit-handler
Ajuda seu agente a controlar o uso de APIs. Ele gerencia limites de requisições e lida com erros para evitar sobrecarga.
O que ela faz
Esta ferramenta ajuda seu programa a lidar com limites de velocidade de APIs externas. Se uma API recusar sua solicitação por estar sobrecarregada ou por outros motivos, ela tentará novamente após um tempo, de forma inteligente.
Quando usar
- ✓Ao chamar APIs que têm limites de quantas vezes você pode pedir dados.
- ✓Quando você recebe erros como '429 Too Many Requests' ou erros temporários do servidor.
- ✓Ao construir um programa que precisa ser confiável ao usar serviços de terceiros.
Exemplo do que pedir para a IA
“Como posso fazer meu programa tentar novamente se a API estiver lenta?”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
Primeiro, ela verifica o tipo de erro para saber se deve tentar de novo. Se sim, ela espera um tempo (que pode ser definido pela própria API ou calculado automaticamente) antes de tentar novamente, evitando sobrecarregar a API.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add sickn33/agentic-awesome-skills --skill api-rate-limit-handlerOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/sickn33/agentic-awesome-skills/main/plugins/agentic-awesome-skills-claude/skills/api-rate-limit-handler/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Manipulador de Limite de Taxa da API
Visão Geral
Uma habilidade para implementar limite de taxa de nível de produção, backoff exponencial e estratégias de retentativa ao integrar com APIs externas. Evita falhas em cascata, respeita cotas upstream e mantém sua aplicação resiliente sob carga.
Quando Usar Esta Habilidade
- Use ao chamar APIs externas que impõem limites de taxa (OpenAI, Stripe, GitHub, etc.)
- Use quando você receber erros 429 Too Many Requests ou 5xx e precisar de recuperação graciosa
- Use ao construir um cliente que deve respeitar os cabeçalhos
Retry-After - Use ao projetar um sistema que se expande para vários provedores de API
- Use quando o usuário disser "lidar com limites de taxa", "adicionar lógica de retentativa", "estratégia de backoff" ou "não ser estrangulado"
Como Funciona
Passo 1: Classificar a resposta
Determine se uma solicitação falha é retentável ou terminal.
| Status | Classificação | Ação |
|---|---|---|
| 200-299 | Sucesso | Retornar resposta |
| 400, 401, 403, 404 | Erro terminal do cliente | Não retentar — corrigir a solicitação |
| 408, 429 | Retentável (limite de taxa / tempo limite) | Retentar com backoff |
| 500, 502, 503, 504 | Retentável (erro do servidor) | Retentar com backoff |
Passo 2: Analisar cabeçalhos de limite de taxa
Sempre verifique as dicas upstream antes de calcular seu próprio atraso.
function getRetryDelay(
response: Response,
attempt: number,
maxDelayMs = 60_000
): number {
// Prefer upstream hints
const retryAfter = response.headers.get("Retry-After");
if (retryAfter) {
const seconds = Number(retryAfter);
if (Number.isFinite(seconds) && seconds >= 0) {
return seconds * 1000;
}
// HTTP-date format
const date = new Date(retryAfter).getTime();
if (Number.isFinite(date)) {
return Math.max(0, date - Date.now());
}
}
// GitHub documents x-ratelimit-reset as Unix epoch seconds.
const resetHeader = response.headers.get("x-ratelimit-reset");
const githubReset = resetHeader === null || resetHeader.trim() === "" ? NaN : Number(resetHeader);
if (Number.isFinite(githubReset)) {
return Math.max(0, githubReset * 1000 - Date.now());
}
// Fallback: capped exponential backoff with full jitter.
const cap = Math.min(1000 * 2 ** attempt, maxDelayMs);
return Math.floor(Math.random() * cap);
}
As dicas upstream são esperas mínimas; nunca as trunque para retentar mais cedo. Se uma dica exceder o orçamento de operação restante, pare sem agendar outra solicitação. O limite se aplica apenas ao backoff de fallback.
Cabeçalhos de reinicialização específicos do provedor não compartilham uma unidade ou formato. Por exemplo, algumas APIs retornam durações enquanto o GitHub retorna segundos de época. Analise um cabeçalho adicional apenas após verificar a documentação atual desse provedor.
Passo 3: Implementar o loop de retentativa
async function fetchWithRetry(
url: string,
options: RequestInit,
maxRetries = 3,
maxElapsedMs = 120_000,
retryNonIdempotent = false
): Promise<Response> {
const startedAt = Date.now();
const method = (options.method ?? "GET").toUpperCase();
const replaySafe = ["GET", "HEAD", "OPTIONS", "PUT", "DELETE"].includes(method)
|| retryNonIdempotent;
for (let attempt = 0; attempt <= maxRetries; attempt++) {
const response = await fetch(url, options);
if (response.ok) return response;
// Terminal errors — do not retry
if (![408, 429, 500, 502, 503, 504].includes(response.status)) {
throw new Error(`Terminal error ${response.status}: ${response.statusText}`);
}
if (!replaySafe) {
throw new Error(
`${method} was not retried because replay safety was not explicitly established`
);
}
// Retryable — but exhausted attempts
if (attempt === maxRetries) {
throw new Error(`Failed after ${maxRetries} retries: ${response.status}`);
}
const remaining = maxElapsedMs - (Date.now() - startedAt);
const delay = getRetryDelay(response, attempt);
if (remaining <= 0 || delay > remaining) {
throw new Error(`Retry cannot be scheduled within ${maxElapsedMs}ms`);
}
// Release the connection before waiting when the body is not needed.
await response.body?.cancel();
console.warn(
`Request failed (${response.status}), retrying in ${Math.round(delay)}ms (attempt ${attempt + 1}/${maxRetries})`
);
await new Promise(resolve => setTimeout(resolve, delay));
}
throw new Error("Unreachable");
}
Passo 4: Adicionar um limitador de taxa no lado do cliente (proativo)
…
Perguntas frequentes
O que são 'limites de velocidade' (rate limits)?
São regras impostas por serviços online para limitar o número de requisições que um usuário ou programa pode fazer em um certo período. Isso evita que um único usuário sobrecarregue o serviço.
O que significa 'tentar novamente com backoff'?
Significa que, se uma tentativa falhar, o programa espera um tempo antes de tentar de novo. Esse tempo aumenta a cada falha (backoff), dando tempo para o serviço se recuperar.
O que são erros '429' e '5xx'?
O erro '429' significa que você excedeu o limite de requisições. Os erros '5xx' (como 500, 503) indicam que o problema está no servidor da API, não no seu pedido, e geralmente são temporários.
Detalhes
Descrição original do autor
Implement bounded, idempotency-aware API throttling, backoff, and retry handling for 429 and transient 5xx responses.
Popularidade
- Estrelas no GitHub
- 48 mil
- Posição no ranking
- #2163
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
00-andruia-consultant
Ajuda seu agente a iniciar ou melhorar projetos de IA. Ele analisa código, sugere ferramentas e cria planos de ação em espanhol.
sickn33/agentic-awesome-skills
007
Faz seu agente realizar auditorias de segurança e modelagem de ameaças. É útil para proteger projetos contra ataques e vulnerabilidades.
sickn33/agentic-awesome-skills
10-andruia-skill-smith
Ajuda seu agente a criar ou melhorar ferramentas de IA. Ele define como as ferramentas funcionam, escreve a documentação e valida a estrutura.
sickn33/agentic-awesome-skills
20-andruia-niche-intelligence
Faz seu agente criar um resumo sobre um setor específico. É útil para entender o contexto, regras, padrões de uso e riscos de um projeto, usando fontes confiáveis.
sickn33/agentic-awesome-skills
Skills parecidas
api-connector-builder
Faz seu agente construir novas conexões com APIs seguindo o padrão já existente. Use quando precisar adicionar mais uma integração sem criar um novo jeito de fazer.
affaan-m/ECC
api-design
Ajuda seu agente a projetar APIs REST seguindo as melhores práticas. É útil para definir como as APIs se comunicam, como os erros são mostrados e como organizar os dados.
affaan-m/ECC
backend-patterns
Ajuda seu agente com padrões de arquitetura do lado do servidor e otimização de banco de dados. É útil para construir ou revisar o código que roda no servidor.
affaan-m/ECC