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

# Limites de pedidos

> Quantos pedidos pode enviar e como tratar as respostas 429.

> [!NOTE]
>
> A API do GetQR está em versão beta e só está disponível para alguns espaços de trabalho. Os detalhes podem mudar antes do lançamento geral.

A API do GetQR limita o número de pedidos que cada chave de API pode enviar, para que uma única integração não torne a API mais lenta para todos.

## Limites

| Limite | Valor |
| - | - |
| Pedidos por chave de API | 600 por minuto |

O limite é contado numa janela deslizante de um minuto e aplica-se a todos os endpoints em conjunto. A [verificação de estado](https://docs.getqr.com/pt/api/endpoints/health.md) não precisa de chave e não conta.

## Cabeçalhos de limite de pedidos

As respostas a pedidos com uma chave de API válida incluem estes cabeçalhos, incluindo as respostas de erro:

| Cabeçalho | Descrição |
| - | - |
| `X-RateLimit-Limit` | Número máximo de pedidos por janela. |
| `X-RateLimit-Remaining` | Pedidos que restam na janela atual. |
| `X-RateLimit-Reset` | Quando a janela reinicia, como carimbo de data/hora Unix em milissegundos. |
| `Retry-After` | Segundos até a janela reiniciar, arredondados para cima. Aguarde esse tempo antes de tentar novamente. |

## Quando ultrapassa o limite

Acima do limite, a API responde `429` com o código `rate_limit_exceeded` e os mesmos cabeçalhos:

```http theme={null}
HTTP/1.1 429 Too Many Requests
X-RateLimit-Limit: 600
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1792764060000
Retry-After: 37

{
  "error": {
    "code": "rate_limit_exceeded",
    "message": "Too many requests.",
    "doc_url": "https://getqr.com/account/api-docs#error-rate_limit_exceeded"
  }
}
```

Aguarde até ao momento do reinício antes de enviar mais pedidos. Adicione uma variação aleatória (jitter) para que vários processos não repitam ao mesmo tempo, e aplique uma espera exponencial nos erros `5xx`:

```javascript theme={null}
async function getqrFetch(url, options = {}, maxRetries = 5) {
  for (let attempt = 0; ; attempt++) {
    const res = await fetch(url, {
      ...options,
      headers: {
        Authorization: `Bearer ${process.env.GETQR_API_KEY}`,
        ...options.headers,
      },
    });

    const retryable = res.status === 429 || res.status >= 500;
    if (!retryable || attempt >= maxRetries) return res;

    // On 429, wait for Retry-After (seconds). Otherwise back off: 1s, 2s, 4s…
    const retryAfter = Number(res.headers.get("Retry-After"));
    const wait =
      res.status === 429 && retryAfter > 0
        ? retryAfter * 1000
        : 1000 * 2 ** attempt;
    const jitter = Math.random() * 250;

    await new Promise((r) => setTimeout(r, wait + jitter));
  }
}
```

> [!TIP]
>
> Só repita `POST /api/v1/qrs` com um cabeçalho `Idempotency-Key`. Assim, uma repetição nunca cria um segundo código QR. Consulte [Idempotência](https://docs.getqr.com/pt/api/introduction.md#idempotência).

## Manter-se abaixo do limite

* Acompanhe `X-RateLimit-Remaining` e abrande antes de chegar a 0.
* Use a [criação de QR em massa](https://docs.getqr.com/pt/api/endpoints/bulk-qr-creations.md) em vez de um pedido por código QR.
* Obtenha até 100 resultados por página com `pageSize=100`. Consulte [Paginação](https://docs.getqr.com/pt/api/introduction.md#paginação).
* Coloque as imagens de QR em cache: as transferências devolvem um `ETag`, pelo que pode enviar `If-None-Match` e receber `304 Not Modified` quando nada mudou.

## Próximos passos

> [card] [Erros](https://docs.getqr.com/pt/api/errors.md)

> [card] [Códigos QR](https://docs.getqr.com/pt/api/endpoints/qr-codes.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.