> ## Documentation Index
> Fetch the complete documentation index at: https://docs.flarepayments.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Rate Limits

> Limites de requisições por endpoint na API da Flare Payments

## Limites por Endpoint

| Endpoint               | Limite              |
| ---------------------- | ------------------- |
| `POST /v1/charges`     | 60 req/min          |
| `POST /v1/withdrawals` | 30 req/min          |
| Demais endpoints       | Sem limite definido |

## Headers de Rate Limit

Todas as respostas incluem os seguintes headers para monitorar o uso:

| Header                  | Descrição                                         |
| ----------------------- | ------------------------------------------------- |
| `X-RateLimit-Limit`     | Limite total de requisições no período            |
| `X-RateLimit-Remaining` | Requisições restantes no período atual            |
| `X-RateLimit-Reset`     | Timestamp Unix de quando o limite será reiniciado |

## Erro de Rate Limit

Ao exceder o limite, a API retorna:

```http theme={null}
HTTP/1.1 429 Too Many Requests
```

```json theme={null}
{
  "error": {
    "code": "rate_limit_exceeded",
    "message": "Too many requests. Please slow down."
  }
}
```

## Recomendações

<Tip>
  Monitore o header `X-RateLimit-Remaining` para adaptar sua frequência de requisições antes de atingir o limite.
</Tip>

* Implemente **exponential backoff** ao receber erros `429`
* Para volume alto, considere processar cobranças em batch

```javascript theme={null}
// Exemplo: respeitar o rate limit
async function criarCobrancaComRetry(dados, tentativas = 3) {
  for (let i = 0; i < tentativas; i++) {
    const res = await fetch('https://api.flarepayments.com/v1/charges', {
      method: 'POST',
      headers: { 'Authorization': 'Bearer YOUR_API_KEY', 'Content-Type': 'application/json' },
      body: JSON.stringify(dados)
    });

    if (res.status !== 429) return res.json();

    const reset = res.headers.get('X-RateLimit-Reset');
    const waitMs = reset ? (reset * 1000 - Date.now()) : (2 ** i * 1000);
    await new Promise(r => setTimeout(r, waitMs));
  }
}
```
