> ## 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.

# Limity požadavků

> Kolik požadavků můžete odeslat a jak zpracovat odpovědi 429.

> [!NOTE]
>
> GetQR API je v beta verzi a je dostupné pro vybrané pracovní prostory. Do obecného vydání se podrobnosti mohou změnit.

GetQR API omezuje, kolik požadavků může každý API klíč odeslat, aby jedna integrace nezpomalila API pro všechny ostatní.

## Limity

| Limit | Hodnota |
| - | - |
| Požadavky na jeden API klíč | 600 za minutu |

Limit se počítá v posuvném jednominutovém okně a platí pro všechny endpointy dohromady. [Kontrola stavu](https://docs.getqr.com/cs/api/endpoints/health.md) klíč nepotřebuje a do limitu se nepočítá.

## Hlavičky limitů

Odpovědi na požadavky s platným API klíčem obsahují tyto hlavičky, a to i chybové odpovědi:

| Hlavička | Popis |
| - | - |
| `X-RateLimit-Limit` | Maximální počet požadavků v jednom okně. |
| `X-RateLimit-Remaining` | Počet požadavků, které v aktuálním okně zbývají. |
| `X-RateLimit-Reset` | Kdy se okno obnoví, jako unixové časové razítko v milisekundách. |
| `Retry-After` | Počet sekund do obnovení okna, zaokrouhlený nahoru. Tak dlouho počkejte, než to zkusíte znovu. |

## Při překročení limitu

Po překročení limitu API odpoví `429` s kódem `rate_limit_exceeded` a stejnými hlavičkami:

```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"
  }
}
```

Než pošlete další požadavky, počkejte do času obnovení. Přidejte náhodný rozptyl (jitter), aby se několik workerů nepokoušelo o opakování ve stejný okamžik, a u chyb `5xx` prodlužujte odstup exponenciálně:

```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]
>
> `POST /api/v1/qrs` opakujte jen s hlavičkou `Idempotency-Key`. Opakovaný pokus pak nikdy nevytvoří druhý QR kód. Viz [Idempotence](https://docs.getqr.com/cs/api/introduction.md#idempotence).

## Jak zůstat pod limitem

* Sledujte `X-RateLimit-Remaining` a zpomalte dřív, než klesne na 0.
* Místo jednoho požadavku na každý QR kód použijte [hromadné vytváření QR kódů](https://docs.getqr.com/cs/api/endpoints/bulk-qr-creations.md).
* Načítejte až 100 výsledků na stránku pomocí `pageSize=100`. Viz [Stránkování](https://docs.getqr.com/cs/api/introduction.md#stránkování).
* Ukládejte obrázky QR kódů do mezipaměti: stažení vracejí `ETag`, takže můžete poslat `If-None-Match` a když se nic nezměnilo, dostanete `304 Not Modified`.

## Co dál

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

> [card] [QR kódy](https://docs.getqr.com/cs/api/endpoints/qr-codes.md)


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