> For the complete documentation index, see [llms.txt](https://docs.caf.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.caf.io/caf-api/caf-api-pt-br/connect/rate-limit.md).

# Limite de taxa

A limitação de taxa define o número máximo de solicitações que uma aplicação pode fazer à API dentro de um período de tempo especificado. Esse mecanismo é crucial para manter a saúde geral e a confiabilidade dos serviços.

## Por que usamos limitação de taxa

A limitação de taxa atende a vários propósitos importantes:

### Estabilidade e desempenho da API

* Impede que qualquer cliente sobrecarregue nossos servidores com solicitações demais
* Garante tempos de resposta consistentes para todos os usuários
* Protege os serviços de backend contra picos de tráfego
* Mantém padrões de carga previsíveis na infraestrutura

### Benefícios de segurança

* Defende contra ataques de força bruta
* Mitiga ataques distribuídos de negação de serviço (DDoS)
* Reduz o impacto de aplicativos cliente mal implementados
* Limita os danos causados por credenciais de API comprometidas

### Alocação justa de recursos

* Garante acesso equitativo aos recursos compartilhados da API entre todos os clientes
* Evita que clientes agressivos degradem o serviço para outros usuários
* Ajuda a priorizar o tráfego de acordo com as necessidades do negócio
* Incentiva padrões eficientes de uso da API

## Como a limitação de taxa funciona

Cada endpoint pode ter limites diferentes, definidos por:

* Janela de tempo (por minuto, hora ou dia)
* Tipo de aplicação (padrão ou empresarial)
* Tipo de operação (limites mais altos para operações de leitura, mais baixos para gravações)

Quando você excede seu limite de taxa, você recebe um `HTTP 429` (resposta de "Muitas solicitações").

## Exemplo de resposta de limite de taxa excedido

Quando você excede o limite de taxa, você receberá uma resposta como esta:

```json
{
  "message": "Muitas solicitações"
}
```

## Como lidar com erros 429 de muitas solicitações

Quando você receber um `429` erro, implemente estas estratégias para lidar com ele de forma elegante:

### Implemente backoff exponencial com jitter

Backoff exponencial é uma estratégia de repetição em que você aumenta progressivamente o tempo de espera entre as tentativas:

```javascript
// Exemplo de pseudo-código de backoff exponencial com jitter
function fetchWithBackoff(url, maxRetries = 5) {
  let retries = 0;
  
  while (retries < maxRetries) {
    try {
      const response = await fetch(url);
      if (response.status !== 429) {
        return response; // Sucesso ou erro diferente
      }
      
      // Calcule o tempo de backoff com jitter
      const baseWaitTime = Math.pow(2, retries) * 1000; // 1s, 2s, 4s, 8s, 16s
      const jitter = Math.random() * 0.5 * baseWaitTime;
      const waitTime = baseWaitTime + jitter;
      
    
      console.log(`Limitação de taxa atingida. Aguardando ${waitTime/1000} segundos antes da tentativa ${retries + 1}/${maxRetries}`);
      await sleep(waitTime);
      retries++;
      
    } catch (error) {
      // Trate outros erros
      throw error;
    }
  }
  
  throw new Error("Número máximo de tentativas atingido");
}
```

### Revise o comportamento da aplicação

* Audite seu código para identificar padrões ineficientes de uso da API
* Procure por loops não intencionais ou chamadas redundantes à API
* Considere agrupar várias operações em uma única solicitação quando aplicável
* Distribua suas solicitações de forma mais uniforme ao longo do tempo, em vez de enviá-las em rajadas

### Implemente cache

* Armazene em cache dados frequentemente acessados e que mudam raramente
* Implemente estratégias adequadas de invalidação de cache
* Use tempos de expiração de cache apropriados com base na volatilidade dos dados
* Considere usar ETags ou cabeçalhos Last-Modified para solicitações condicionais


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.caf.io/caf-api/caf-api-pt-br/connect/rate-limit.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
