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

# İstek sınırları

> Kaç istek gönderebileceğiniz ve 429 yanıtlarını nasıl ele alacağınız.

> [!NOTE]
>
> GetQR API'si beta aşamasındadır ve seçili çalışma alanlarında kullanılabilir. Ayrıntılar genel sürümden önce değişebilir.

GetQR API'si her API anahtarının gönderebileceği istek sayısını sınırlar; böylece tek bir entegrasyon API'yi herkes için yavaşlatamaz.

## Sınırlar

| Sınır | Değer |
| - | - |
| API anahtarı başına istek | Dakikada 600 |

Sınır, kayan bir dakikalık pencere üzerinden sayılır ve tüm uç noktalara birlikte uygulanır. [Durum kontrolü](https://docs.getqr.com/tr/api/endpoints/health.md) anahtar gerektirmez ve sayılmaz.

## Sınır başlıkları

Geçerli bir API anahtarıyla yapılan isteklerin yanıtları, hata yanıtları dahil, şu başlıkları içerir:

| Başlık | Açıklama |
| - | - |
| `X-RateLimit-Limit` | Pencere başına en fazla istek sayısı. |
| `X-RateLimit-Remaining` | Geçerli pencerede kalan istekler. |
| `X-RateLimit-Reset` | Pencerenin sıfırlanacağı zaman; milisaniye cinsinden Unix zaman damgası. |
| `Retry-After` | Pencere sıfırlanana kadar kalan saniye, yukarı yuvarlanmış. Yeniden denemeden önce bu kadar bekleyin. |

## Sınırı aştığınızda

Sınır aşıldığında API, `rate_limit_exceeded` koduyla ve aynı başlıklarla `429` yanıtı verir:

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

Daha fazla istek göndermeden önce sıfırlanma zamanına kadar bekleyin. Birden fazla işçi aynı anda yeniden denemesin diye rastgele gecikme (jitter) ekleyin ve `5xx` hatalarında üstel olarak geri çekilin:

```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` isteğini yalnızca bir `Idempotency-Key` başlığıyla yeniden deneyin. Böylece yeniden deneme hiçbir zaman ikinci bir QR kodu oluşturmaz. Bkz. [Idempotency](https://docs.getqr.com/tr/api/introduction.md#idempotency).

## Sınırın altında kalın

* `X-RateLimit-Remaining` değerini izleyin ve 0'a ulaşmadan önce yavaşlayın.
* Her QR kodu için ayrı bir istek yerine [toplu QR oluşturmayı](https://docs.getqr.com/tr/api/endpoints/bulk-qr-creations.md) kullanın.
* `pageSize=100` ile sayfa başına en fazla 100 sonuç alın. Bkz. [Sayfalama](https://docs.getqr.com/tr/api/introduction.md#sayfalama).
* QR görsellerini önbelleğe alın: indirmeler bir `ETag` döndürür; böylece `If-None-Match` gönderebilir ve hiçbir şey değişmediğinde `304 Not Modified` alabilirsiniz.

## Sırada ne var

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

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


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