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

# Ratenbegrenzungen

> Wie viele Anfragen Sie senden können und wie Sie mit 429-Antworten umgehen.

> [!NOTE]
>
> Die GetQR API befindet sich in der Beta-Phase und steht ausgewählten Workspaces zur Verfügung. Details können sich bis zur allgemeinen Veröffentlichung noch ändern.

Die GetQR API begrenzt, wie viele Anfragen jeder API-Schlüssel senden kann, damit eine einzelne Integration die API nicht für alle verlangsamt.

## Limits

| Limit | Wert |
| - | - |
| Anfragen pro API-Schlüssel | 600 pro Minute |

Das Limit wird über ein gleitendes Zeitfenster von einer Minute gezählt und gilt für alle Endpunkte zusammen. Die [Statusprüfung](https://docs.getqr.com/de/api/endpoints/health.md) braucht keinen Schlüssel und wird nicht mitgezählt.

## Header zur Ratenbegrenzung

Antworten auf Anfragen mit gültigem API-Schlüssel enthalten diese Header, auch Fehlerantworten:

| Header | Beschreibung |
| - | - |
| `X-RateLimit-Limit` | Maximale Anzahl an Anfragen pro Zeitfenster. |
| `X-RateLimit-Remaining` | Verbleibende Anfragen im aktuellen Zeitfenster. |
| `X-RateLimit-Reset` | Zeitpunkt, an dem das Zeitfenster zurückgesetzt wird, als Unix-Zeitstempel in Millisekunden. |
| `Retry-After` | Sekunden bis zum Zurücksetzen des Zeitfensters, aufgerundet. Warten Sie so lange, bevor Sie es erneut versuchen. |

## Wenn Sie das Limit überschreiten

Oberhalb des Limits antwortet die API mit `429`, dem Code `rate_limit_exceeded` und denselben Headern:

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

Warten Sie bis zum Reset-Zeitpunkt, bevor Sie weitere Anfragen senden. Fügen Sie Jitter hinzu, damit mehrere Worker nicht im selben Moment erneut anfragen, und verwenden Sie bei `5xx`-Fehlern exponentiellen Backoff:

```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]
>
> Wiederholen Sie `POST /api/v1/qrs` nur mit einem `Idempotency-Key`-Header. Dann erstellt eine Wiederholung nie einen zweiten QR-Code. Siehe [Idempotenz](https://docs.getqr.com/de/api/introduction.md#idempotenz).

## Unter dem Limit bleiben

* Beobachten Sie `X-RateLimit-Remaining` und drosseln Sie das Tempo, bevor der Wert 0 erreicht.
* Verwenden Sie die [Massenerstellung](https://docs.getqr.com/de/api/endpoints/bulk-qr-creations.md) statt einer Anfrage pro QR-Code.
* Rufen Sie mit `pageSize=100` bis zu 100 Ergebnisse pro Seite ab. Siehe [Paginierung](https://docs.getqr.com/de/api/introduction.md#paginierung).
* Speichern Sie QR-Bilder im Cache: Downloads liefern einen `ETag`, sodass Sie `If-None-Match` senden können und `304 Not Modified` erhalten, wenn sich nichts geändert hat.

## Wie geht es weiter?

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

> [card] [QR-Codes](https://docs.getqr.com/de/api/endpoints/qr-codes.md)


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