Rate Limiting

API kullanım limitleri ve aşım durumunda yapılması gerekenler.

Limitler

KartFiyat, adil kullanım ve sistem kararlılığı için rate limiting uygular. Limitler seçtiğiniz plana göre değişir.

Limit Türü Başlangıç Profesyonel Plus
Günlük Limit 100.000 istek/gün 250.000 istek/gün 750.000 istek/gün
Dakikalık Limit 600 istek/dk 1.200 istek/dk 1.500 istek/dk
Kategori Endpoint'leri Erişim yok Tam erişim Tam erişim
Ürün Görselleri / Özellikler Erişim yok Tam erişim Tam erişim
Plus Endpoint'leri (/plus/*) Erişim yok Erişim yok Tam erişim
CSV İşlemi Erişim yok Erişim yok 10 işlem/gün

Kurumsal paket Plus ile aynı endpoint erişimine sahiptir. CSV günlük limiti, genel istek limitlerinden bağımsız olarak kullanıcı başına ayrıca uygulanır.

Rate Limit Header'ları

Her API yanıtı, rate limit durumunuz hakkında bilgi veren header'lar içerir:

Header Açıklama
X-RateLimit-Limit-Day Günlük maksimum istek sayısı
X-RateLimit-Remaining-Day Bugün kalan istek sayısı
X-RateLimit-Limit-Minute Dakikalık maksimum istek sayısı
X-RateLimit-Remaining-Minute Bu dakika kalan istek sayısı
X-RateLimit-Reset Günlük limitin sıfırlanacağı Unix timestamp
Retry-After Limit aşımında beklenecek saniye (429 durumunda)

Örnek Yanıt Header'ları

HTTP/1.1 200 OK
Content-Type: application/json
X-RateLimit-Limit-Day: 250000
X-RateLimit-Remaining-Day: 249875
X-RateLimit-Limit-Minute: 60
X-RateLimit-Remaining-Minute: 58
X-RateLimit-Reset: 1738627200

Limit Aşımı

Rate limit aşıldığında API 429 Too Many Requests yanıtı döner.

Günlük Limit Aşımı

{
  "success": false,
  "error": {
    "code": "DAILY_LIMIT_EXCEEDED",
    "message": "Günlük istek limitinize ulaştınız.",
    "limit": 250000,
    "used": 250000,
    "reset_at": "2026-02-04T00:00:00+03:00"
  }
}

Dakikalık Limit Aşımı

{
  "success": false,
  "error": {
    "code": "RATE_LIMIT_EXCEEDED",
    "message": "Dakikalık istek limitinize ulaştınız. Lütfen biraz bekleyin.",
    "limit": 60,
    "retry_after": 45
  }
}

En İyi Uygulamalar

Rate Limit Yönetimi İçin İpuçları

  • 1
    Header'ları kontrol edin: Her yanıtta dönen rate limit header'larını okuyun ve kalan limitinizi takip edin.
  • 2
    Exponential backoff uygulayın: 429 hatası aldığınızda, her denemede bekleme süresini artırın (1s, 2s, 4s, 8s...).
  • 3
    Yanıtları cache'leyin: Sık erişilen verileri local olarak cache'leyerek gereksiz istekleri azaltın.
  • 4
    Batch işlemleri kullanın: Mümkün olduğunda tek bir istekte birden fazla öğe alın.
  • 5
    İstekleri yayın: Burst istekler yerine istekleri zamana yayarak dakikalık limiti aşmayı önleyin.

Exponential Backoff Örneği

async function fetchWithRetry(url, options, maxRetries = 3) {
  let retries = 0;

  while (retries < maxRetries) {
    const response = await fetch(url, options);

    if (response.status === 429) {
      const retryAfter = response.headers.get('Retry-After') || Math.pow(2, retries);
      console.log(`Rate limited. Waiting ${retryAfter} seconds...`);
      await new Promise(r => setTimeout(r, retryAfter * 1000));
      retries++;
      continue;
    }

    return response;
  }

  throw new Error('Max retries exceeded');
}

Limit Artırımı

Mevcut planınızın limitleri ihtiyaçlarınızı karşılamıyorsa, daha yüksek limitli bir plana geçebilir veya özel bir kurumsal plan için bizimle iletişime geçebilirsiniz.