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

# Hastighetsbegränsningar

> Hur många begäranden du kan skicka och hur du hanterar 429-svar.

> [!NOTE]
>
> GetQR:s API är i beta och finns för utvalda arbetsytor. Detaljer kan ändras före den allmänna lanseringen.

GetQR:s API begränsar hur många begäranden varje API-nyckel kan skicka, så att en enskild integration inte gör API:et långsammare för alla andra.

## Gränser

| Gräns | Värde |
| - | - |
| Begäranden per API-nyckel | 600 per minut |

Gränsen räknas över ett glidande fönster på en minut och gäller alla slutpunkter tillsammans. [Statuskontrollen](https://docs.getqr.com/sv/api/endpoints/health.md) behöver ingen nyckel och räknas inte.

## Huvuden för hastighetsbegränsning

Svar på begäranden med en giltig API-nyckel innehåller dessa huvuden, även felsvar:

| Huvud | Beskrivning |
| - | - |
| `X-RateLimit-Limit` | Högsta antal begäranden per fönster. |
| `X-RateLimit-Remaining` | Begäranden kvar i det aktuella fönstret. |
| `X-RateLimit-Reset` | När fönstret nollställs, som Unix-tidsstämpel i millisekunder. |
| `Retry-After` | Sekunder tills fönstret nollställs, avrundat uppåt. Vänta så länge innan du försöker igen. |

## När du överskrider gränsen

Över gränsen svarar API:et `429` med koden `rate_limit_exceeded` och samma huvuden:

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

Vänta tills fönstret nollställs innan du skickar fler begäranden. Lägg till slumpmässig fördröjning (jitter) så att flera arbetare inte försöker igen exakt samtidigt, och använd exponentiell backoff vid `5xx`-fel:

```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]
>
> Försök bara igen med `POST /api/v1/qrs` om du skickar ett `Idempotency-Key`-huvud. Då skapar ett nytt försök aldrig en andra QR-kod. Se [Idempotens](https://docs.getqr.com/sv/api/introduction.md#idempotens).

## Håll dig under gränsen

* Bevaka `X-RateLimit-Remaining` och sakta ned innan värdet når 0.
* Använd [massskapande av QR-koder](https://docs.getqr.com/sv/api/endpoints/bulk-qr-creations.md) i stället för en begäran per QR-kod.
* Hämta upp till 100 resultat per sida med `pageSize=100`. Se [Paginering](https://docs.getqr.com/sv/api/introduction.md#paginering).
* Cacha QR-bilder: nedladdningar returnerar en `ETag`, så du kan skicka `If-None-Match` och få `304 Not Modified` när inget har ändrats.

## Nästa steg

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

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


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